开源 Android Python java nginx 微软 shell centos google Firefox 程序员 Windows Ubuntu php HTML5 linux命令 wordpress linux apache mysql

CentOS Linux 远程终端ssh乱码问题

我们经常碰到Linux乱码问题。尤其是碰到网页上传个中文文件名的文件,ssh登陆到linux一看全乱码想删除都不行。很郁闷的。如下图所示中文文件名全都是显示问号了(这个乱码由于你的编码设置不同,显示的也不太一样)

Centos Linux 远程终端ssh乱码问题

还有一个就是vim的乱码

Centos Linux 远程终端ssh乱码问题

解决办法:

首先需要给linux安装中文支持。这里以CentOS为例,所以采用yum安装

# yum groupinstall chinese-support

然后再设置linux系统的i18n文件,位置在/etc/sysconfig/i18n

内容如下

LANG="zh_CN.GB18030"
SUPPORTED="zh_CN.UTF-8:zh_CN.GBK:zh_CN.GB18030:zh_CN:zh:en_US.UTF-8:en_US:en"
SYSFONT="latarcyrheb-sun16"

接着设置LC_ALL环境变量,在/etc/profile文件里加入

export LC_ALL=zh_CN.GB18030

全部设置好后,重启系统。再次登陆后,用如下命令查看

-bash-3.2# locale
LANG=zh_CN.GB18030
LC_CTYPE="zh_CN.GB18030"
LC_NUMERIC="zh_CN.GB18030"
LC_TIME="zh_CN.GB18030"
LC_COLLATE="zh_CN.GB18030"
LC_MONETARY="zh_CN.GB18030"
LC_MESSAGES="zh_CN.GB18030"
LC_PAPER="zh_CN.GB18030"
LC_NAME="zh_CN.GB18030"
LC_ADDRESS="zh_CN.GB18030"
LC_TELEPHONE="zh_CN.GB18030"
LC_MEASUREMENT="zh_CN.GB18030"
LC_IDENTIFICATION="zh_CN.GB18030"
LC_ALL=zh_CN.GB18030

完成以上操作,应该就可以正常显示中文文件名字了。不过这个只是linux没有问题了,我们的ssh客户端还需要支持才可以。我一般使用Putty来当做ssh客户端,下面就以putty为例子进行设置。先设置使用的字体,选择windows->Appearance,弹出的字体界面里选择“新宋体”,字符集选择“CHINESE_GB2312”

Centos Linux 远程终端ssh乱码问题

再设置编码

Centos Linux 远程终端ssh乱码问题

以上设置完成后,就可以正常显示了。效果如下图所示:

Centos Linux 远程终端ssh乱码问题

在命令行输入中文文件名也可以正常使用了。

Centos Linux 远程终端ssh乱码问题

到目前为止,ssh下操作中文文件名的问题就彻底解决了。可以正常输入中文文件名来操作了。

下面是vim显示乱码问题,vim一般都是因为文件编码和显示编码的问题引起的乱码。

我们打开文件发现乱码后,采用如下命令

# set encoding=utf-8 termencoding=gbk

这样以后,vim也可以正常操作中文了。效果图

Centos Linux 远程终端ssh乱码问题

网上看到一些资料说是将i18n的LANG设置为zh_CN.UTF-8,然后LC_ALL也是设置为zh_CN.UTF-8,但是我试验了下,效果并不好(也将putty调整为了utf-8)。但是文件名显示还是乱码。需要用ls --show-control-chars来正常显示,输入中文文件名也不正常。以上只是在putty下使用,也许配合其他ssh客户端效果不太一样。稍后我再添加一些其他客户端效果。

延伸阅读

评论