Python3中遇到UnicodeEncodeError: ‘ascii’ codec can’t encode characters in position 25-45: ordinal not in range(128)

如果是python 2.x的话需要在文件中加上

# coding: utf-8 
reload(sys)
sys.setdefaultencoding("utf8")

但是Python3应当默认就使用utf8编码即使设置了这些也仍然不能正常打印。

最终查看了一下系统环境编码,发现问题(我的是ARM架构下的Ubuntu

>>> import sys
>>> sys.stdout.encoding  
'ANSI_X3.4-1968'

解决办法

1、设置环境变量LANG

在linux或Mac上设置环境变量的方式一样,在/etc/profile增加一行
export LANG=”en_US.UTF-8″
然后source /etc/profile

我当前系统默认已经是utf-8,采用第二种解决

2、使用PYTHONIOENCODING

在运行python命令前添加参数 PYTHONIOENCODING=utf-8 python3 api.py

该参数的解释可查看

https://docs.python.org/3.6/using/cmdline.html