CentOS7及Docker配置中文字符集问题
发布于 20 天前 作者 yan 60 次浏览

作者:willblog,原文:

https://blog.csdn.net/networken/article/details/97951173

说明

Linux系统默认使用英文字符集,不会安装中文字符集等其他字符。

查看当前字符集

$ echo $LANG 
 
en_US.UTF-8 

安装字符集 使用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= 
 


查看系统是否安装中文字符集支持

# locale -a | grep CN 
 
bo_CN 
 
bo_CN.utf8 
 
ug_CN 
 
ug_CN.utf8 
 
zh_CN 
 
zh_CN.gb18030 
 
zh_CN.gb2312 
 
zh_CN.gbk 
 
zh_CN.utf8 
 


若没有执行以下命令进行安装

#CentOS6.x: 
 
yum groupinstall chinese-support 
 


 
#CentOS7.x 
 
yum install -y kde-l10n-Chinese 
 
yum reinstall -y glibc-common 
 


 
#定义字符集 
 
localedef -c -f UTF-8 -i zh_CN zh_CN.UFT-8 
 
#确认载入成功 
 
locale -a 
 


修改系统字符集 修改系统字符集的配置文件:

  • Centos6.x字符集配置文件: /etc/sysconfig/i18n
  • Centos7.x字符集配置文件: /etc/locale.conf
# echo 'LANG="zh_CN.UTF-8"' > /etc/locale.conf 
 
# source /etc/locale.conf 
 


或者临时改变字符集:

LANG="<字符集>" 
 
LANG="zh_CN.UTF-8" 
 


 
#或者把字符集环境变量写到profile 
 
vim /etc/profile 
 
source /etc/profile 
 


验证字符集修改

# echo $LANG 
 
zh_CN.UTF-8 
 


 
# locale 
 
LANG=zh_CN.UTF-8 
 
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= 
 


修改ssh终端字符集

如果按照以上方法设置修改设置中文语言还是不行,注意SSH终端选择的编码,如xshell为例,把终端的编码选择中文,或者UTF8即可。 如果系统界面依然出现乱码,再安装以下包:

yum groupinstall "fonts" -y 
 


 
如果还是乱码,进入fonts安装路径执行以下命令 
 
[root[@localhost](/user/localhost) ~]# cd /usr/share/fonts/ 
 
[root[@localhost](/user/localhost) ~]# fc-cache -fv 
 


容器环境配置字符集

以CentOS7容器镜像为例 查看默认配置

# docker run -it --rm centos sh 
 
sh-4.2# echo $LANG 
 


 
sh-4.2# locale 
 
LANG= 
 
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= 
 


 
sh-4.2# locale -a 
 
C 
 
POSIX 
 
en_US.utf8 
 


以配置zh_CN.GB18030字符集为例

yum install -y kde-l10n-Chinese 
 
yum reinstall -y glibc-common 
 
localedef -c -f GB18030 -i zh_CN zh_CN.GB18030 
 


 
#验证成功加载中文语言包zh_CN.gb18030 
 
# locale -a 
 
C 
 
POSIX 
 
en_US.utf8 
 
zh_CN.gb18030 
 


修改字符集配置

$ cat /etc/locale.conf  
 
LANG="en_US.UTF-8" 
 
$ echo 'LANG="zh_CN.GB18030"' > /etc/locale.conf && source /etc/locale.conf 
 
$ echo "export LC_ALL=zh_CN.GB18030" >> /etc/profile && source /etc/profile 
 


 
#验证配置生效 
 
$ echo $LANG 
 
zh_CN.GB18030 
 


Dockerfile示例:

docker容器环境需要基于dockerfile制作对应字符集镜像,追加以下内容到自定义dockerfile中:

# cat Dockerfile 
 
FROM centos 
 
LABEL Maintainer dockerhub.com 
 
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \ 
 
 && yum -y install kde-l10n-Chinese \ 
 
 && yum -y reinstall glibc-common \ 
 
 && localedef -c -f GB18030 -i zh_CN zh_CN.GB18030 \ 
 
 && echo 'LANG="zh_CN.GB18030"' > /etc/locale.conf \ 
 
 && source /etc/locale.conf \ 
 
 && yum clean all  
 
ENV LANG=zh_CN.GB18030 \ 
 
   LC_ALL=zh_CN.GB18030 
 


END -----

K8S线上直播培训推荐 ** 本次课程围绕:Docker容器、Docker镜像、Docker网络、数据持久化、Docker最佳实践、Kubernetes集群安装、服务部署、Pod、集群资源管理、控制器、网络、调度、服务发现、存储、Helm、监控、DevOps等。课程全部采用直播方式,实时互动,专属交流群课后答疑,专属课件文档,每章节课后作业跟踪,课后视频无限回看。点击了解更多详情!

点击阅读原文,直达报名链接!

回到顶部