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命令确认编码是否修改成功

Logo

更多推荐