问题:使用一台Linux系统的机器,终端总是显示有乱码,不是中文乱码,看起来像是英文乱码,我这强迫症又受不了了
解决方案:
Linux字符编码默认为UTF-8,如果出现英文乱码有可能是系统设置的编码方式为GBK。
- 查看locale(locale命令用来设置和显示程序运行的语言环境)
# locale
LANG=zh_CN.gbk
LC_CTYPE="zh_CN.gbk"
LC_NUMERIC="zh_CN.gbk"
LC_TIME="zh_CN.gbk"
LC_COLLATE="zh_CN.gbk"
LC_MONETARY="zh_CN.gbk"
LC_MESSAGES="zh_CN.gbk"
LC_PAPER="zh_CN.gbk"
LC_NAME="zh_CN.gbk"
LC_ADDRESS="zh_CN.gbk"
LC_TELEPHONE="zh_CN.gbk"
LC_MEASUREMENT="zh_CN.gbk"
LC_IDENTIFICATION="zh_CN.gbk"
LC_ALL=
设置locale的根本就是设置一组总共12个LC开头的变量,不包括LANG和LC_ALL。
LANG:LANG的优先级是最低的,它是所有LC_*变量的默认值,下方所有以LC_开头变量(LC_ALL除外)中,如果存在没有设置变量值的变量,那么系统将会使用LANG的变量值来给这个变量进行赋值。如果变量有值,则保持不变
LC_ALL:它不是环境变量,它是一个宏,它可通过该变量的设置覆盖所有LC_*变量,这个变量设置之后,可以废除LC_*的设置值,使得这些变量的设置值与LC_ALL的值一致,注意LANG变量不受影响。
优先 级:LC_ALL > LC_* > LANG
可以看出原系统设置的为中文字体显示和运行的语言环境,所有的设置都是使用的zh_CN.gbk
,因中英文字符编码方式不同,可能造成英文字符或者空格显示有乱码。
- 查看系统/etc/sysconfig/i18n文件:
原文件为
LANG="en_US.UTF-8"
LC_ALL="en_US.UTF-8"
因无管理员权限,普通账户可以只改自己的界面语言,不影响别的用户
cp /etc/sysconfig/i18n $HOME/.i18n
修改$HOME/.i18n文件,如:
LANG="en_US.UTF-8"
SUPPORTED="zh_CN.GB18030:zh_CN:zh:en_US.UTF-8:en_US:en"
SYSFONT="latarcyrheb-sun16"
LC_ALL="en_US.UTF-8"
export LC_ALL
第一行表示当前系统的语言环境变量设置,这里是en_US.UTF-8
第二行表示系统支持哪些字符集,没有设置的语言字符集类型会出现乱码
第三行表示系统终端字符的字体,设置的是latarcyrheb-sun16
5.退出后再次查看locale(再次登录才生效)
乱码的字符消失了。locale转变为:
LANG=en_US.UTF-8
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=