内容简单读:
这并不是一个从根本上解决问题的方法,简单的说就是用管道将命令的输出给 iconv ,用 iconv 命令将字符编码转化,以此达到恢复中文乱码的目的。
作为一个两年前才开始开发的开源项目,Babun 在 GitHub 上已经有5600+颗 ★ 了,其好评程度可见一斑。
Babun 最大的一个优点就是安装之后即可使用。相比之下,Cygwin 有各种烦恼:
- 安装随时都有掉线的可能,也许开个 proxy 才能好好玩耍;
- 安装时要挑选好要安装的软件包(默认安装的软件包中是没有 vim 的),这对初学者来说是一个极大的挑战;
- 安装之后还需要各种设置( 如 rm 的 alias )才能有好不容易从 Linux 那养成的 Terminal 使用习惯;
- ……
尽管如此,Cygwin 还是有一个非常大的亮点:不管是从 Linux 移植过来的命令,还是 Windows 的 CMD 命令,都完全支持中文(zh_CN)显示,没有乱码;然而,Babun 对中文的支持并不完美:
- 设置 UTF8 编码时: Linux 命令中文显示正常,CMD 命令乱码;
- 设置 GBK 编码时: CMD 命令中文显示正常, Linux 命令乱码,且开头的 » 乱码。
具体原因就是 CMD 的编码为 GBK ,而 Babun 的编码为 UTF8 。这导致了在设置中无论设置哪种编码方式都不可兼得。
所以,将输出结果用管道转化成另一种编码方式就可以啦。
临时解决方案:
之所以称之为临时“解决方案”,是因为,这并不能从根本上解决问题。
具体来说,就是在输入的命令后面再加上
| iconv -f UTF8 -t GBK # UTF8 转化为 GBK
或
| iconv -f GBK -t UTF8 # GBK 转化为 UTF8
举个例子,运行 ipconfig 命令并将 GBK 转为 UTF8:
1 ipconfig | iconv -f UTF8 -t GBK
为了方便起见,可以将“ 本地化( Locale ) ”设置为 “ zh_CN ” ;
然后根据自己的使用习惯,如果更常使用 Linux 命令 ,就将“ 字符集(Character set) ”设置为 “ UTF-8 ”,对于 CMD 命令再使用“ | iconv -f GBK -t UTF8 ”转换,而对于经常使用的 CMD 命令,又可以使用 alias 定义别名的方式缩短命令行。如:
alias ipconfig='ipconfig | -f GBK -t UTF8' #将“ ipconfig ”定义为“ ipconfig | -f GBK -t UTF8 ”的别名
类似地,如果更常使用 CMD 命令,就将“ Character set ”设置为 “ GBK ”,对于开头的 » 乱码,也可以通过修改PS1变量去掉(参考)。
这个问题已经在 GitHub 上报告了 isuess :chinese messy code #582(在这个 isuess 下我提到了我的临时解决方案)。