一、项目说明:
用户上传一个压缩文件(内含 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)``` 