这篇文章是以前重构一个python2项目为python3时遇到的一个问题,当时记录下来没有发表,现在发表在这里当做存档。
众所周知,python3相比python2的一个最大的改变就是str统一是unicode编码的,带有中文的字符串再也不用写成 u’中文’ 这么麻烦,但是最近却遇到了 print(‘中文’) 报错
UnicodeEncodeError: 'ascii' codec can't encode characters in position 157-158: ordinal not in range(128)
这个问题只发生在生产环境上,本地环境没有问题。那么首先考虑的就是生产环境和本地环境差别在哪里了—–启动方式。
生产环境上使用了 uWSGI 来做服务器处理web请求,而本地环境不是。
尝试在 uWSGI 配置文件中加入编码设置:(1140267353)一起成长一起加油的伙伴群!软件测试,与你同行!
\[uwsgi\]
...
env=LC\_ALL=zh\_CN.UTF-8
...
重启,报错again!
经过百度和谷歌狂轰乱炸之后,也找不出什么有用的资料,再仔细想想,以前的项目使用了同样的 runit + uWSGI
为啥没问题呢?结合这一点去看 uWSGI 的官方文档,果然有Python 3的特别说明