linux服务器的字符集设置可能影响到网站页面出现 “???” 等问号乱码,还有可能导致文件中的汉字部分出现乱码。有两个原因
- 服务器没有安装 zh_CN.UTF-8 字符集,导致不支持中文!
- 服务器虽然装了 zh_CN.UTF-8 字符集,但是未设置成系统默认的字符集
查看 linux 安装的字符集
运行命令
结果
安装 zh_CN.UTF-8 字符集
1 2 3 4 5 6
| apt-get install locales
cd /usr/share/locales sudo ./install-language-pack zh_CN.UTF-8
|
查看当前 Linux 字符集
1 2
| # 执行这个命令,查看和语言编码有关的环境变量 locale
|
显示如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| LANG= LANGUAGE=en_US:en LC_CTYPE="POSIX" LC_NUMERIC="POSIX" LC_TIME="POSIX" LC_COLLATE="POSIX" LC_MONETARY="POSIX" LC_MESSAGES="POSIX" LC_PAPER="POSIX" LC_NAME="POSIX" LC_ADDRESS="POSIX" LC_TELEPHONE="POSIX" LC_MEASUREMENT="POSIX" LC_IDENTIFICATION="POSIX" LC_ALL=
|
可以看到大多数都默认为POSIX 类型的,这时可以改服务器的默认字符集为zh_CN.UTF-8(我测试过改了没问题哦,可以解决汉字乱码问题。如果能通过设置SecureCrt等终端可以解决的话,就没必要改了)
除了使用 locale 之外,还可以使用下列命令查看当前的字符集
1 2 3 4 5
| 1、# echo $LANG
2、# env |grep LANG
3、# export |grep LANG
|
设置当前 Linux 字符集
方法1:
1 2 3 4 5 6 7 8 9 10
| vi /etc/sysconfig/i18n
LANG="en_US.UTF-8" SYSFONT="latarcyrheb-sun16"
LANG="zh_CN.UTF-8" SUPPORTED="zh_CN.UTF-8:zh_CN:zh" SYSFONT="latarcyrheb-sun16"
|
然后在不重启的情况下重新加载i18n文件
1
| source /etc/sysconfig/i18n
|
方法2:
1 2 3 4
| vi /etc/profile
export LC_ALL="zh_CN.UTF-8" export LANG="zh_CN.UTF-8"
|
方法3:可是化修改
1
| dpkg-reconfigure locales # 此命令会进入界面
|
在界面中,选中en_US.UTF-8和zh_CN.UTF-8 (点击空格键 为选中),然后tab键选中,回车键确认;进入最终确认页面,显示选中的编码,tab键选中,回车键确认。完成。
修改完显示
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| LANG=zh_CN.UTF-8 LANGUAGE=en_US:en LC_CTYPE="zh_CN.UTF-8" LC_NUMERIC="zh_CN.UTF-8" LC_TIME="zh_CN.UTF-8" LC_COLLATE="zh_CN.UTF-8" LC_MONETARY="zh_CN.UTF-8" LC_MESSAGES="zh_CN.UTF-8" LC_PAPER="zh_CN.UTF-8" LC_NAME="zh_CN.UTF-8" LC_ADDRESS="zh_CN.UTF-8" LC_TELEPHONE="zh_CN.UTF-8" LC_MEASUREMENT="zh_CN.UTF-8" LC_IDENTIFICATION="zh_CN.UTF-8" LC_ALL=zh_CN.UTF-8
|
locale 详解
字段
1 2 3 4 5 6 7 8 9 10 11 12
| 1、 语言符号及其分类(LC_CTYPE) 2、 数字(LC_NUMERIC) 3、 比较和排序习惯(LC_COLLATE) 4、 时间显示格式(LC_TIME) 5、 货币单位(LC_MONETARY) 6、 信息主要是提示信息,错误信息, 状态信息, 标题, 标签, 按钮和菜单等(LC_MESSAGES) 7、 姓名书写方式(LC_NAME) 8、 地址书写方式(LC_ADDRESS) 9、 电话号码书写方式(LC_TELEPHONE) 10、度量衡表达方式(LC_MEASUREMENT) 11、默认纸张尺寸大小(LC_PAPER) 12、对locale自身包含信息的概述(LC_IDENTIFICATION)。
|
理解locale的设置
设定locale就是设定12大类的locale分类属性,即 12个LC_*。除了这12个变量可以设定以外,为了简便起见,还有两个变量:LC_ALL和LANG。
它们之间有一个优先级的关系:LC_ALL > LC_* > LANG
可以这么说,LC_ALL是最上级设定或者强制设定,而LANG是默认设定值。