Centos终端输出时中文显示乱码
字符编码
字符编码是一种将字符映射到计算机可以理解的二进制数的系统,常见的字符编码有 UTF-8、GBK、ISO-8859-1等,不同字符编码使用不同的方式来表示,所以如果编码和解码不匹配,就会出现乱码问题。
中文乱码
对于linux服务器,以较常见的Centos为例,一般默认是不支持中文的,但有时程序的终端打印会包含中文,于是在显示上就会出现乱码,对于终端出现中文乱码情况,有以下几种常见的原因及应对方式。
1、未安装中文语言包
服务器系统支持中文的前提,是要先包含中文语言包,所以当出现中文乱码,可以先检查系统是否安装了中文语言包。
检查是否安装中文语言包
locale -a | grep "zh_CN"
安装中文语言包
sudo yum groupinstall "fonts"
这里通过 groupinstall 可以额一次性安装和字体相关的包组。
2、系统语言设置有误
即服务器系统语言未设置为支持中文,这个问题可以通过修改 /etc/locale.conf
来设置。
检查系统编码
echo $LANG
执行以上检查命令,如果结果显示不包含 zh_CN.UTF-8,则表示文件系统编码有误。
修改系统编码
手动修改
# 使用编辑器如 vi、nano 等打开 /etc/locale.conf,将 LANG 参数值修改为 zh_CN.UTF-8
LANG="zh_CN.UTF-8"
命令行修改
sed -i '/^LANG/s/LANG=.*/LANG="zh_CN.UTF-8"/' /etc/locale.conf
重新加载配置
source /etc/locale.conf
3、终端字符集设置有误
即第三方的远程连接客户终端,如常用的ssh客户端等,如果正确设置了系统编码后发现还是有中文乱码,那大概率就是连接终端的字符集没设置为 UTF-8。
如果是这种情况,则需要手动修改实际使用的连接终端配置,将字符集改为UTF-8相关配置项即可。
4、文件系统编码问题
如果文件名或文件内容是在不同编码环境下创建的,也可能会导致中文乱码,例如从Linux到Windows进行跨平台文件操作,如果碰到这种情况,也可以使用 iconv 来转换文件的字符编码,示例如下
# 将原始编码为GBK的文件input.txt,转换为UTF-8编码,并以 output.txt 输出
iconv -f GBK -t UTF-8 input.txt -o output.txt
5、应用程序字符配置问题
不同的应用程序和环境可能默认使用不同的字符编码,如果应用程序处理的文本包含中文字符,而字符编码配置不正确或不一致,就会导致乱码,例如 Java 就需要在代码中指定字符编码。