CentOS7及Docker配置中文字符集問題
阿新 • • 發佈:2020-07-21
把應用程式跑到k8s中的時候, 頁面部分中文顯示亂碼,用的centos7.7的官方映象作為基礎映象。
最終的dockerfile配置FROM centos-jdk:8u11 # 這個是自定義的映象 LABEL xxx <[email protected]> RUN wget http://download-ib01.fedoraproject.org/pub/epel/7/x86_64/Packages/e/epel-release-7-12.noarch.rpm \ && rpm -Uvh epel-release-7-12.noarch.rpm \ && yum install -y cronolog && mkdir /usr/share/fonts RUN yum -y install kde-l10n-Chinese \ && yum -y reinstall glibc-common \ && localedef -c -f UTF-8 -i zh_CN zh_CN.UFT-8 \ && echo 'LANG="zh_CN.UFT-8"' > /etc/locale.conf \ && source /etc/locale.conf \ && yum clean all ENV LANG=zh_CN.UFT-8 \ LC_ALL=zh_CN.UFT-8 ADD simsun.ttc /usr/share/fonts ADD apache-tomcat-8.5.56.tar.gz /opt RUN ln -s /opt/apache-tomcat-8.5.56 /opt/tomcat
改之前檢視系統字符集資訊
[root@htbb-admin-84f9d548fb-6nv5s /]# 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= [root@htbb-admin-84f9d548fb-6nv5s /]#
改之後檢視系統字符集資訊
[root@htbb-admin-8d54f5c5f-cqhtm /]# locale -a C en_US.utf8 POSIX zh_CN.uft8 [root@htbb-admin-8d54f5c5f-cqhtm /]# locale LANG=zh_CN.UFT-8 LC_CTYPE="zh_CN.UFT-8" LC_NUMERIC="zh_CN.UFT-8" LC_TIME="zh_CN.UFT-8" LC_COLLATE="zh_CN.UFT-8" LC_MONETARY="zh_CN.UFT-8" LC_MESSAGES="zh_CN.UFT-8" LC_PAPER="zh_CN.UFT-8" LC_NAME="zh_CN.UFT-8" LC_ADDRESS="zh_CN.UFT-8" LC_TELEPHONE="zh_CN.UFT-8" LC_MEASUREMENT="zh_CN.UFT-8" LC_IDENTIFICATION="zh_CN.UFT-8" LC_ALL=zh_CN.UFT-8 [root@htbb-admin-8d54f5c5f-cqhtm /]# cat /etc/locale.conf LANG="zh_CN.UFT-8" [root@htbb-admin-8d54f5c5f-cqhtm /]#
以下內容來自連結:https://www.cnblogs.com/kcxg/p/11451120.html
說明
Linux系統預設使用英文字符集,不會安裝中文字符集等其他字元。 檢視當前字符集$ echo $LANG安裝字符集 使用locale命令看看當前系統所使用的字符集
en_US.UTF-8
$ 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_CNug_CN.utf8 zh_CNzh_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 ~]# cd /usr/share/fonts/ [root@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.GB18030Dockerfile示例: 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