在 Ubuntu 服务器中,运行 Python3 脚本,出现如下问题:
UnicodeEncodeError: 'ascii' codec can't encode characters in ordinal not in range(128)
但本机是可以运行的.
查找原因发现是: 系统环境语言导致.
[1] - 查看系统环境的编码:
import sys
sys.stdout.encoding
Ubuntu 服务器和本机输出分别为:
# Ubuntu 服务器
ANSI_X3.4-1968
# 本机
UTF-8
[2] - 问题解决:
<1> - 方法1
设置系统环境变量,编辑 ~/.bashrc
文件,添加如下:
export LANG="zh_CN.UTF-8"
export LANG="en_US.UTF-8"
<2> - 方法2
运行 python 脚本时,添加参数:PYTHONIOENCODING=utf-8
. 如:
PYTHONIOENCODING=utf-8 python3 demo.py
参考:https://docs.python.org/3.6/using/cmdline.html#envvar-PYTHONIOENCODING
<3> - 方法3
在待运行的 python 脚本中,添加如下代码:
import sys
import codecs
sys.stdout = codecs.getwriter("utf-8")(sys.stdout.detach())
print('测试(中文)')