使用docker部署项目时遇到的python编码问题之UnicodeEncodeError: ‘ascii‘ codec can‘t encode characters
作者:互联网
使用docker在服务器部署项目相关问题解决
出现问题:
-
yum 不能使用,报错信息为:File “/usr/bin/yum”, line 30 except KeyboardInterrupt, e:
-
使用python时,报错信息为:
UnicodeEncodeError: ‘ascii’ codec can’t encode characters in position 0-1: ordinal not in range(128)
分析问题及解决:
-
在解决问题时发现yum不能使用的另一种原因就是/usr/bin/yum /usr/bin/python not found 啥啥啥的,于是就好奇,不是yum么,怎么何python有关,终于查到了症结,详细解释及解决方法:https://www.huaweicloud.com/articles/281ee1a68e3482a041eb2d72360e0b68.html 。
总结起来就是yum是用python写的,而且是用python2.x写的,那我们都知道python3.x何python2.x相比较变化就比较大。所以要sudo vi /etc/bin/yum (或者是在root身份下直接 vi /etc/bin/yum),然后在上面改成 #!/usr/bin/python2.x。 至于具体是2.x,你可以通过ls /etc/bin/python | grep python 看一下自己系统的是那个版本的。
然后就可以正常使用啦! -
在docker当中制作了一个镜像,是在centos7的基础之上进行了一些python3的配置,然后在执行python3 filename.py时报错,就是上面的报错信息,于是在网上查了很多文章和解决办法。
原因就是自己电脑上面用的编码方式是"POSIX",至于详细解释,大家可以去网上自己查一下,总之就是不是utf-8的编码,所以问题就变得简单了,让自己的系统使用utf-8进行编码和解码。
他们的办法都是对的,总结起来就是三个步骤,但是还是要辩证的使用,不能盲目去按照别人的套路进行:
(i) 进入系统(此时docker的容器环境和正常的服务器一样了),检查系统中正在使用以及安装的编码集
locale
进行查看当前系统正在使用的编码方式locale -a
查看当前系统上已经安装的比编码集(ii) 在系统中安装中国地区的utf-8编码集(如果已经安装也就是有了zh_CN.UTF-8编码集,那么此步略过)
安装中文语言包
yum install -y kde-l10n-Chinese
安装 glibc-common
yum reinstall -y glibc-common
安装或者说生成指定类型的zh_CN.UTF-8编码集
localedef -i zh_CN -f UTF-8 zh_CN.UTF-8
具体的解释附上超链接https://blog.51cto.com/arthur376/1915170
然后还是要查看一自己的系统上面是不是真的安装好了zh_CN.UTF-8编码集,命令在上一个小步骤哦。没有的话就看看这些步骤中是哪个失误了。
(iii) 更新系统的配置,使用这种zh_CN.UTF-8编码集
更新文件呢,因为我用的是centos7。所以,只是针对centos7这个版本的来解决。
有的人说要更改/etc/locale.conf这个配置文件,有的人说要在/etc/profile当中修改,反正我只修改/etc/locale.conf没用,所以就两个都修改了。
对于/etc/locale.conf这个配置文件echo ‘LANG=”zh_CN.UTF-8“ ’ > /etc/locale.conf
会自动覆盖里面原来的内容。
对于/etc/profile,可以使用echo 'export LANG=zh_CN.UTF-8' >> /etc/profile echo 'export LANGUAGE=zh_CN.UTF-8' >> /etc/profile echo 'export LC_TIME=zh_CN.UTF-8' >> /etc/profile
最后,就是一个连续的
source /etc/locale.conf
source /etc/profile
(iv)检验系统确实是使用了zh_CN.UTF-8编码集(注意:很容易在这个地方犯错,我就是没有注意检查这个步骤,无限次重新删除镜像,新建镜像),命令还是第一步当中的。
然后,大功告成,可以安心的使用python执行代码了。
另外附上一个高手的docker操作细节:
在Dockerfile当中实现(但效果并不是很理想,大家可以参考一下)
https://cloud.tencent.com/developer/article/1507591
标签:编码,zh,CN,python,etc,codec,yum,UnicodeEncodeError,UTF 来源: https://blog.csdn.net/Zhao_knight/article/details/114598772