'ascii' codec can't encode chara
2019-03-11 本文已影响0人
杨永杰
最近遇到一个问题,新建的一个镜像里面跑的代码无法支持中文。错误如下:
'ascii' codec can't encode character '\u82b1' in position 0: ordinal not in range(128)
error.png
1、代码encoding
第一反应是代码里面没有做好中文的encoding,但仔细检查之后发现代码没有问题,并且代码在其他环境上是能跑的
2、镜像打入的包版本不对
又看了一下镜像里打入的依赖包,和我在其他机器上用的不一样,有可能包版本导致的,虽然可能性不大,只能硬着头皮试一下,over
error.png
3、python里输入输出语言编码不对
好吧,都怀疑到python上了,主要看看python中调用了什么系统编码
image.png
oh, 貌似设置也没啥问题
4、系统LC_ALL设置
细看错误'ascii' codec can't encode character '\u82b1' in position 0,代码中、python设置无论哪里都没有设置ascii编码,可以猜测在执行到这一步的时候,默认采用了ascii编码,只能想到系统语言设置上去了,果然是这样的。
LC_ALL实际包含12个LC_*的设置
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
对,就要要设置这个东西,设置的办法网上很多,正常只需要export LC_ALL="en_US.UTF-8"
, 若出现
bash: warning: setlocale: LC_ALL: cannot change locale (en_AU.UTF-8)
错误,可以按下面这样配置。
locale-gen "en_US.UTF-8"
dpkg-reconfigure locales
export LC_ALL="en_US.UTF-8"
完事,这是设置系统的默认语言和编码方式。
这是根音根音根音
done