我在这里试图解决的问题是,在与 OS X 机器的 ssh 会话终端中,命令的输出ls
无法正确显示文件名中的 utf8 编码中文字符(显示类似 的内容???
)。我使用的 ssh 客户端是Windows 上的securecrt
和putty
(都配置为使用 utf8 编码)。它们都存在此问题。另一方面,文件内容中的 utf8 字符可以正确显示(如通过vim
和cat
),并且 bash 的自动完成功能也可以正确显示文件名中的 utf8 字符(当有多个候选项时在候选项列表中,以及当只有一个候选项时在自动完成的文件名中)。
所以问题是,如何ls
在与 OS X 机器的 ssh 会话终端中正确显示 utf8 编码的文件名?
答案1
此问题通常是由于环境变量引起的,因此请先检查一下。输入env
即可获得结果。在我的情况下,set LANG( export LANG=en_US.UTF-8
) 就可以正常工作。
答案2
对于 Putty:在 OSX 目标机器上,查找 LC_CTYPE 环境变量 ( echo $LC_CTYPE
)。它应该是UTF-8或者类似英文版.UTF-8。(如果只有“en_EN”之类的内容,则设置为 ISO。在这种情况下,将其更改为英文版.UTF-8通过添加export LC_CTYPE=en_EN.UTF-8
到您的$HOME/.bash_profile)。在 Windows 机器上的 Putty 中,转到配置 -> 窗口/翻译,然后选择与 OSX 机器上的环境变量相同的字符集。如果服务器上的环境变量和 Putty 设置相同,它应该可以正常工作。