• CentOS7及Docker配置中文字符集问题


     

    把应用程序跑到k8s中的时候, 页面部分中文显示乱码,用的centos7.7的官方镜像作为基础镜像。

    最终的dockerfile配置
    FROM centos-jdk:8u11   # 这个是自定义的镜像
    
    LABEL xxx <xxx@qq.com>
    
    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 /]# 
    

      

     
     

    说明

    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_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.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
    复制代码
  • 相关阅读:
    shell 算术运算符
    shell 关系运算符
    shell 布尔运算符
    shell逻辑运算符
    shell 字符串运算符
    shell 文件测试运算符
    shell 运算符
    shell 循环总结
    Shell echo命令
    利用WHID为隔离主机建立隐秘通道
  • 原文地址:https://www.cnblogs.com/chenjinxi/p/13355534.html
Copyright © 2020-2023  润新知