cygwin的一些输出只是不能用错误的编码读取?

sha*_*ava 2 encoding cygwin character

我使用Win7-64bit的cygwin,并与把"zh_CN.UTF-8"作为默认区域设置.偶尔,来自cygwin的一些输出无法使用如下错误编码读取:

[junit] ????: ?????????????????? can't
Run Code Online (Sandbox Code Playgroud)

任何的想法?谢谢.

Jos*_*shz 5

虽然sharajava已经找到了自己的解决方案,但我不得不说这个解决方案至少对我来说不是很好.问题是如果您将文本的终端选项(mintty实际上是"CharSet" )更改为"GBK",屏幕上会显示UTF-8字符是什么?它们将是凌乱,难以理解的代码.我在VIM上进行了实验,无论是中文欢迎文本还是包含中文字符的UTF-8编码源代码都显示为无法读取的代码.这对我来说是不可接受的,或者我认为,对大多数人来说都是如此.

最后,我想出了一种方法来绕过Windows命令提示符(即cmd.exe)的缺陷并启用mintty运行DOS命令而不会遇到乱码.这是我的解决方案,可能会有所帮助.

测试环境:
操作系统:Win7 64位中文简体
Cygwin:64位
命令提示符:默认代码页936

组态:

  • 将Cygwin的语言环境设置zh_CN.UTF-8为大多数人想要的
  • 添加Locale=zh_CNCharset=UTF-8.minttyrc使得mintty使用UTF-8作为输出编码
  • 添加cmd /c chcp 65001.bashrc

现在,您可以运行DOS命令ipconfig,taskkill,help.exeformat.com等直接mintty,即使在使用Linux命令,如伴侣less,grep.每次登录bash时,它都会告诉您Active code page: 65001输出编码的含义cmd.exe已暂时更改为UTF-8.

当代码页cmd.exe改为65001时,cmd.exe将不再使用中文作为提示文本语言(英语代替),也不支持中文目录.这是一个缺陷,cmd.exe与之无关mintty.不知何故,mintty设法输出cmd.execp65001不能输出的汉字.我无法解释这一点,无论如何,它的确有效.

要设置cygwin的语言环境,您可以将以下代码添加到.bashrc:

export LC_ALL=zh_CN.UTF-8
export LC_CTYPE=zh_CN.UTF-8
export LANG=zh_CN.UTF-8
Run Code Online (Sandbox Code Playgroud)

另请参阅:
Windows命令行中的Unicode字符 - 如何操作?
我的应用程序打印国际字符,但我只看到灰色框