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

在Docker环境下使用Python进行文件操作时,遇到UnicodeEncodeError异常。本文详细介绍了如何通过修改Docker环境的编码设置来解决由ASCII编码引起的中文文件名处理问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

写完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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值