'ascii' codec can't encode character '\u82b1' in position 0: ordinal not in range(128)

最近遇到一个问题,新建的一个镜像里面跑的代码无法支持中文。错误如下:
'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

你可能感兴趣的:('ascii' codec can't encode character '\u82b1' in position 0: ordinal not in range(128))