linux修改字符编码
1. 目的linux服务器对中文不优化,需要修改服务器的默认编码为utf8,避免程序在中文处理时出现奇怪的问题。2. 查看服务器编码使用locale命令查看编码,结果如下:LANG=en_USLC_CTYPE="en_US"LC_NUMERIC="en_US"LC_TIME="en_US"LC_COLLATE="en_US"LC_MONETARY="en_US"LC_MESSAGES="en_US
1. 目的
linux服务器对中文不优化,需要修改服务器的默认编码为utf8,避免程序在中文处理时出现奇怪的问题。
2. 查看服务器编码
使用locale命令查看编码,结果如下:
LANG=en_US
LC_CTYPE="en_US"
LC_NUMERIC="en_US"
LC_TIME="en_US"
LC_COLLATE="en_US"
LC_MONETARY="en_US"
LC_MESSAGES="en_US"
LC_PAPER="en_US"
LC_NAME="en_US"
LC_ADDRESS="en_US"
LC_TELEPHONE="en_US"
LC_MEASUREMENT="en_US"
LC_IDENTIFICATION="en_US"
LC_ALL=en_US
对于上述字段的解释如下:
LC_COLLATE:定义该环境的排序和比较规则
LC_CTYPE:用于字符分类和字符串处理,控制所有字符的处理方式,包括字符编码,字符是单字节还是多字节,如何打印等。是最重要的一个环境变量。 LC_MONETARY,货币格式
LC_NUMERIC:非货币的数字显示格式
LC_TIME:时间和日期格式
LC_MESSAGES:提示信息的语言。另外还有一个LANGUAGE参数,它与LC_MESSAGES相似,但如果该参数一旦设置,则LC_MESSAGES参数就会失效。 LANGUAGE参数可同时设置多种语言信息,如LANGUAGE="zh_CN.GB18030:zh_CN.GB2312:zh_CN"。
LANG:LC_*的默认值,是最低级别的设置,如果LC_*没有设置,则使用该值。类似于 LC_ALL
LC_ALL:它是一个宏,如果该值设置了,则该值会覆盖所有LC_*的设置值。注意,LANG的值不受该宏影响
*需要注意的是,LANG 变量的值是 LC_的默认值,是最低级别的设置,如果LC_ 没有设置,则使用该值。类似于 LC_ALL。 LC_ALL 它是一个宏,如果该值设置了,则该值会覆盖所有LC_的设置值。注意,LANG 的值不受该宏影响。
3. 影响服务器编码(LANG)的几个文件
/etc/sysconfig/i18n:设置服务器编码
~/.bash_profile:用户登录时会自动修改用户配置
~/.bashrc:用户登录时自动修改用户配置
上边两个文件可能会在用户登录时重新设置用户编码,所以如果编码修改不生效,一定要确认这两个文件是不是设置了编码。
/etc/profile.d/lang.sh:在这个脚本里可以看到服务器是怎么设置编码的。如果LANG值为空,则重新从/etc/sysconfig/i18n中加载编码。
# /etc/profile.d/lang.sh - set i18n stuff
sourced=0
if [ -n "$LANG" ]; then
saved_lang="$LANG"
[ -f "$HOME/.i18n" ] && . "$HOME/.i18n" && sourced=1
LANG="$saved_lang"
unset saved_lang
else
for langfile in /etc/sysconfig/i18n "$HOME/.i18n" ; do
[ -f $langfile ] && . $langfile && sourced=1
done
fi
4. 修改编码
1.修改/etc/sysconfig/i18n文件,设置如下编码:
LANG=“en_US.UTF-8”
SYSFONT=“latarcyrheb-sun16”
2.使文件生效
首先unset LANG,然后source /etc/sysconfig/i18n
3.确认bashrc等文件是否修改了编码
4.重新登录服务器,使用locale命令确认编码是否修改成功
更多推荐
所有评论(0)