Linux上编码问题-locale

/ Linux_manage / 没有评论 / 1328浏览

Windows的默认编码为GBK,Linux的默认编码为UTF-8

参数

没有参数则默认打印当前语言环境

-a

所有可用公共语言环境

root@999:~# locale -a
C
C.UTF-8
en_AG
en_AG.utf8
en_AU.utf8
·····
en_SG.utf8
en_US.utf8

修改编码

/etc/sysconfig/i18n

# vi /etc/sysconfig/i18n

/etc/profile

# vi /etc/profile
export LC_ALL="zh_CN.GBK"
export LANG="zh_CN.GBK"

locale详解

root@999:~# locale
LANG=en_US.UTF-8
LANGUAGE=
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"# 对locale自身包含信息的概述
LC_ALL=

优先级

设定locale就是设定12大类的locale分类属性,即 12个LC_*。除了这12个变量可以设定以外,为了简便起见,还有两个变量:LC_ALL和LANG

它们之间有一个优先级的关系:LC_ALL > LC_* > LANG

可以这么说,LC_ALL是最上级设定或者强制设定,而LANG是默认设定值

LANG,LC_*的默认值,是最低级别的设置,如果LC_*没有设置,则使用该值。类似于 LC_ALL

LC_ALL,它是一个宏,如果该值设置了,则该值会覆盖所有LC_*的设置值。注意,LANG的值不受该宏影响

设置编码

ubuntu

# dpkg-reconfigure locales
# locale-gen en_US.UTF-8
# export LC_ALL="en_US.UTF-8"

docker 容器

需要在Dockerfile这一步就补全编码,然后ENV指明编码格式