问题
多台Linux机器运行python程序,其中某一台报错,而其他几台正常,代码中已加入#coding=utf-8。
UnicodeEncodeError: 'ascii' codec can't encode characters in position 29-32: ordinal not in range(128)
既然有的机器可以正常输出,所以猜想是系统语言的问题,通过locale -a命令发现,出错机器的编码是 zh_CN.utf8 ,而正常输出的机器的编码中有 en_US.utf8 ,所以猜想出问题的机器的语言环境应该有缺少
解决
1.安装语言包
sudo apt-get -y install language-pack-zh-hans
locale -a 查看,已安装上en_US.utf8
2.设置环境变量LANG
在linux或Mac上设置环境变量的方式一样
vim ~/.bash_profile
export LANG="en_US.UTF-8"
保存退出后重新打开命令行控制台
3.使用PYTHONIOENCODING
在运行python命令前添加参数
PYTHONIOENCODING=utf-8 python test.py
4.在代码中添加 sys.stdout = codecs.getwriter(“utf-8”)(sys.stdout.detach()) ,使代码变为:
import sys
import codecs
sys.stdout = codecs.getwriter("utf-8")(sys.stdout.detach())
print('中文')
- ‘中文’.encode(‘utf-8’)
参考
https://www.cnblogs.com/telwanggs/p/10383702.html
https://blog.csdn.net/u011415481/article/details/80794567
https://blog.csdn.net/j___t/article/details/97705231