Python编码错误UnicodeEncodeError的一种解决方案

写完python自动构建脚本后,将其部署到docker中报了这么个错:

UnicodeEncodeError: 'ascii' codec can't encode characters in position: ordinal not in range

后来发现是python中zipFile压缩文件中有中文文件名,导致编码错误。

一开始考虑是python自身的编码问题后,尝试:

import sys
# sys.setdefaultencoding() does not exist, here!
reload(sys)  # Reload does the trick!
sys.setdefaultencoding('UTF8')

发现无效,检查python3.0已经不支持这种方式设置编码,而且3.0后python默认为utf-8编码。经过长时间排查,发现是docker linux环境编码为ASCII码导致编码异常。

import sys

# 通过此方法获取当前系统的编码
print(sys.getfilesystemencoding())
# ASCII

发现问题后,尝试解决问题。首先在docker中安装locales:

$ sudo apt-get install locales

在命令行中设置zn_CN.UTF-8编码:

$ export LANG=zh_CN.UTF-8
$ export LC_ALL=zh_CN.UTF-8

注:如果LC_ALL设置报错,那么请输入下面的命令:

# 如果LC_ALL报错:warning: LC_ALL: cannot change locale (zh_CN.UTF-8),执行:
$ localedef -i zh_CN.UTF-8 -f UTF-8 zh_CN.UTF-8

至此,编码问题得以解决。

你可能感兴趣的:(Python)