使用docker部署项目时遇到的python编码问题之UnicodeEncodeError: ‘ascii‘ codec can‘t encode characters

使用docker在服务器部署项目相关问题解决

出现问题:

  1. yum 不能使用,报错信息为:File “/usr/bin/yum”, line 30 except KeyboardInterrupt, e:

  2. 使用python时,报错信息为:
    UnicodeEncodeError: ‘ascii’ codec can’t encode characters in position 0-1: ordinal not in range(128)
    使用docker部署项目时遇到的python编码问题之UnicodeEncodeError: ‘ascii‘ codec can‘t encode characters

分析问题及解决:

  1. 在解决问题时发现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 看一下自己系统的是那个版本的。
    然后就可以正常使用啦!

  2. 在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
使用docker部署项目时遇到的python编码问题之UnicodeEncodeError: ‘ascii‘ codec can‘t encode characters

(iv)检验系统确实是使用了zh_CN.UTF-8编码集(注意:很容易在这个地方犯错,我就是没有注意检查这个步骤,无限次重新删除镜像,新建镜像),命令还是第一步当中的。

然后,大功告成,可以安心的使用python执行代码了。
另外附上一个高手的docker操作细节:
在Dockerfile当中实现(但效果并不是很理想,大家可以参考一下)
https://cloud.tencent.com/developer/article/1507591

上一篇:Python UnicodeEncodeError报错处理


下一篇:接口测试中读取excel中的请求数据含有中文问题,UnicodeEncodeError: 'latin-1' codec can't encode character &