0

我正在尝试将MinTTYMSYS一起使用(从此处下载),我注意到它似乎不支持 Unicode。

IE:

  1. 我无法将 Unicode 文本粘贴到其中(结果是垃圾)。

  2. 如果我cat将 Unicode 文件发送到终端(无论是 UTF-8 还是 UTF-16),我就会得到垃圾。

  3. 如果我使用ls并且文件是 Unicode,它会打印出垃圾。将结果传送到文件并没有帮助——即使在支持 Unicode 的文本编辑器中查看它仍然是垃圾。

  4. 我无法弄清楚UTF-8设置中的设置是如何工作的。它似乎没有改变任何东西。

  5. 当我尝试下载源代码并构建它时,我得到了我无法解决的构建错误:

    Makefile:117: charset.d: No such file or directory
    Makefile:117: child.d: No such file or directory
    Makefile:117: config.d: No such file or directory
    Makefile:117: ctrls.d: No such file or directory
    Makefile:117: minibidi.d: No such file or directory
    Makefile:117: std.d: No such file or directory
    Makefile:117: term.d: No such file or directory
    Makefile:117: termclip.d: No such file or directory
    Makefile:117: termline.d: No such file or directory
    Makefile:117: termmouse.d: No such file or directory
    Makefile:117: termout.d: No such file or directory
    Makefile:117: winclip.d: No such file or directory
    Makefile:117: winctrls.d: No such file or directory
    Makefile:117: windialog.d: No such file or directory
    Makefile:117: wininput.d: No such file or directory
    Makefile:117: winmain.d: No such file or directory
    Makefile:117: winprint.d: No such file or directory
    Makefile:117: wintext.d: No such file or directory
    Makefile:117: wintip.d: No such file or directory
    Makefile:117: xcwidth.d: No such file or directory
    Makefile:117: res.d: No such file or directory
    windres --preprocessor 'gcc -E -xc-header -DRC_INVOKED -MMD -MP 'res.rc res.o
    gcc xcwidth.c -c -MMD -MP  -include std.h -std=gnu99 -Wall -Wextra -Werror
        -Wundef -march=i586 -mtune=pentium-m -DNDEBUG -fomit-frame-pointer -Os
    In file included from <command-line>:0:0:
    ./std.h:4:28: fatal error: cygwin/version.h: No such file or directory
    compilation terminated.
    make: *** [xcwidth.d] Error 1
    

问题:

  1. 是否有可能以某种方式在 MSYS/MinTTY 中获得 Unicode 支持(这似乎是两者的问题)?

  2. 如果没有,那么我在哪里可以获得所有这些文件charset.d,以及如何为 MSYS 构建 MinTTY?

4

1 回答 1

3

Mintty 确实支持 UTF-8。您可以在其选项的文本页面上启用它。

MSYS 确实不支持它。相反,它使用系统的“ANSI”代码页,例如美国和西欧系统上的 CP1252。因此,这也是 MSYS 的默认设置。

此外,MSYS bash 设置为将每个字符的最高位解释为元标志,因此默认情况下它无法处理 ASCII 以外的任何内容。要改变这一点,请将以下内容放入~/.inputrc

set input-meta on
set output-meta on
set convert-meta off

要获得完整的 Unicode 支持(开箱即用),您需要使用 Cygwin 1.7 而不是作为 MSYS 的 Cygwin 1.3 分支。

MSYS mintty 需要使用 MSYS 版本的 gcc 和 make 而不是 MinGW 构建,因为它需要 MinGW 不提供的 POSIX 功能。使用 安装它们mingw-get install msys-gcc msys-make,并在运行时将 MSYS 可执行文件粘贴在路径的前面:PATH=/bin:$PATH make.

于 2011-06-19T10:21:24.360 回答