一、项目说明:
用户上传一个压缩文件(内含 html 文件夹),网站解压文件并保存至指定目录,供外部直接访问静态 html 文件。
二、问题:
解压文件时报错:UnicodeEncodeError: 'ascii' codec can't encode characters,具体信息见链接:报错信息
三、尝试思路
- 代码在本地,macos 下可解压含中文的文件。
- 在线上解压英文 html 文件也是正常的。
- 报错的代码单独在 ubuntu 下运行正常,可以创建文件。
- google 了所有关键词,基本都是 2.7 的解决方案,在项目里使用无效。
- 找到一个类似的问题,可能由 ubuntu 系统语言原因导致。原问题链接
四、出错代码块:
def handle_uploaded_file(f, num, new_dir_name):
release_file_dir = os.path.join(UPLOAD_FILES_DIR, str(num))
new_dir = os.path.join(release_file_dir,new_dir_name)
filePath = f
with zipfile.ZipFile(filePath, 'r') as zf:
for fn in zf.namelist():
right_fn = fn.encode('cp437').decode('utf-8') # 将文件名正确编码
right_fn = os.path.join(release_file_dir, right_fn)
if right_fn[-1] == '/':
os.makedirs(right_fn, mode=0o777) #创建文件夹
continue
with codecs.open(right_fn, 'w+', encoding='utf-8') as output_file: # 创建并打开新文件
with zf.open(fn, 'r') as origin_file: # 打开原文件
shutil.copyfileobj(origin_file, output_file) # 将原文件内容复制到新文件
renameFile(release_file_dir,new_dir)
return os.path.join(release_file_dir,new_dir_name)```