今天同事反馈说主机docker环境里面sh的时候会有这个报错,我虎躯一震,精神百倍,又是知识盲区,又可以给脑子里面上新货了。

解决思路:

前提:OS---Red Hat 7.6

根据猜测应该是字符编码问题,先看环境变量~

有这玩意,你报错我就直接拉黑你~然后source,莫得解决,不是这里的问题,root以及其他用户下执行sh,没有任何报错,奇了怪了,继续排查

百度下解决方法:

大家的解决方法普遍都是

yum -y install kde-l10n-Chinese telnet &&

yum -y reinstall glibc-common

#基本就能搞定 ,还有修改一下

/etc/locale.conf LC_ALL="zh_CN.UTF-8"

照着百度整一遍,好像也是莫得反应,当然我这里的zh_CN.UTF-8换成了我们的报错内容:zh_CN.GB18030。

接着与其他docker环境做对比,发现其他docker环境也有类似问题,由此可见这玩意不会影响执行,只不过可能对汉字就不是很友好了。

继续,要做先驱者。

locale命令看下:(将有关当前语言环境或全部公共语言环境的信息写到标准输出上)-通俗理解就是打印当前所有的语言环境。

可以看出当前环境是有报错这个语言环境的 

重点介绍下:(知识点~~~)

  • LANG:LANG的优先级是最低的,它是所有LC_*变量的默认值,下方所有以LC_开头变量(LC_ALL除外)中,如果存在没有设置变量值的变量,那么系统将会使用LANG的变量值来给这个变量进行赋值。如果变量有值,则保持不变

  • LC_ALL:它不是环境变量,它是一个宏,它可通过该变量的设置覆盖所有LC_*变量,这个变量设置之后,可以废除LC_*的设置值,使得这些变量的设置值与LC_ALL的值一致,注意LANG变量不受影响。

  • 优先级:LC_ALL > LC_* > LANG


那因为点啥呢?那就看他的配置文件:

1、locale默认文件存放位置: /usr/share/i18n/locales (这里locale -a也可直接查看当前系统所有可用 )

2、设置locale在下面几个路径

一、可以修改系统环境变量,/etc/profile----不适合我,记得source

export LC_ALL=zh_CN.utf8

export LANG=zh_CN.utf8

二、修改/etc/locale.gen文件,当前OS莫得此文件,改完记得 locale-gen 命令使其生效

三、命令行模式

localectl set-locale LANG=en_US.UTF-8

四、/etc/locale.conf

在此处添加了,好像这玩意也没啥作用,后面注释掉了

五、也是用此方法解决了

localedef -c -f UTF-8 -i zh_CN zh_CN.GB18030

没太明白意思,就看了下帮助以及使用,这里有input 和output

usage这里有打印列表,localedef --list-archive

好像是加了这玩意,shell才能识别这个编码格式了,好神奇~

localedef :

转化语言环境和字符集描述(charmap)源文件以生成语言环境数据库。

 行了,问题解决了,我就打住了。

 

 

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐