CentOS7及Docker配置中文字符集問題

  • 2019 年 10 月 4 日
  • 筆記

作者: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 ~]# 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.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