![cygwin 显示矩形而不是字符](https://linux22.com/image/50330/cygwin%20%E6%98%BE%E7%A4%BA%E7%9F%A9%E5%BD%A2%E8%80%8C%E4%B8%8D%E6%98%AF%E5%AD%97%E7%AC%A6.png)
我在 cygwin 中遇到了一些问题,
当我在 cygwin 中使用 make 实用程序时,它打印矩形而不是文本。此外,当文本不是英语(即波兰语或俄语)时,我会看到矩形而不是字符。但当我打印这些符号时,我看到了它们。我用的是mintty,还有XTerm,mintty好一点。
locale
Xterm的输出:
$ locale
LANG=en_US.UTF-8
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_ALL=
但问题是,虽然我的 Windows XP 是英文版,但我不在美国并且有俄罗斯时间和日期设置,也许这就是问题所在?
我想正确地看到不同语言的文本,有什么办法吗?
mintty 和 xterm 的行为也有点不同。我有一个波兰语语言的文本文件,cat
在 mintty 中没有给出该文本的矩形,而cat
在 xterm 中给出了一些字符的矩形。
在 mintty 中 make 的输出如下所示:
$ make
make: ▒▒▒▒ `default' ▒▒ ▒▒▒▒▒▒▒ ▒▒▒▒▒▒▒▒▒▒ ▒▒▒▒▒▒.
像这样:
$ make
make: �� `default' � ���� ����� ���.
在 xterm 中。
我找到了一种针对某些语言修复它的方法:https://stackoverflow.com/questions/13094248/how-do-i-get-accented-letters-to-actually-work-on-bash 当我像那里所说的那样设置 mintty 选项并指定字符集 ISO-8859-2 时,我可以很好地看到波兰语文本。只是我不明白,我以 utf-8 格式保存文本,为什么需要设置字符集,就好像我的文本是 ANSI 格式一样。
当我将字符集设置为 CP1251 时,我只能看到 make 结果(这是俄语,我不知道为什么)。
答案1
注意:我要求OP将他的问题更新为输出locale
听起来您遇到了区域设置问题,您可以使用 来查看当前的区域设置locale
。您很可能有一个LC_*
设置导致make
以终端无法识别的格式输出。如果您选择了 UTF8 字符集,然后有一个未设置为解析 UTF8 字符串或支持它们的终端,您将看到此内容。同样,如果您的语言环境为非 utf-8,并且您的终端设置为显示 utf-8,您也会看到类似的问题。 Minitty 支持他们:
$ perl -le 'binmode(STDOUT, ":utf8"); print "\x{0e44}\x{0e45}\x{0e46}";'
ไๅๆ
尝试LC_ALL=C make
, orexport LC_ALL=C && make
并查看块输出是否消失。
为了回答你关于 utf8 和 ANSI 差异的问题,utf8 有一个更大的字符集。为了解决这个问题,utf8 使用 2 位来描述扩展字符序列,其中 ISO-8859-2 等字符集仅使用 1 位。但是,除非像这样的技巧物料清单放入文件中(并不总是支持),您使用的程序不知道差异,因此依赖于您中设置的locale
如何解释这些字符串的设置。使这些问题变得复杂的是,并非所有应用程序支持utf8。有关编码、unicode 和 utf8 细节的更多详细信息,请参见维基百科。如果您需要将俄语文本编码为 unicode,可以在以下位置找到 unicode 序列:维基百科还。
如果您在 Makefile 中使用扩展字符,则必须确保它们符合您打算运行它们的编码。
答案2
mintty 设置的字体和区域设置是什么?您可以通过单击 mintty 窗口的左上角找到设置,选择“选项...”,然后单击“文本”。
我的字体设置为:Consolas,11 号。区域设置:en_US,字符集:UTF-8。
首先尝试一下,然后尝试将您的区域设置设置为俄语。