写完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
至此,编码问题得以解决。