python解压缩zip中文文件名乱码
在写一个自动化处理工具,用zipfile解压文件的时候,发现解压出来的中文文件名全变成了乱码
windows中文默认编码gbk,与zipfile默认cp437冲突导致的
解决方案:
python3.11版本以下:
修改zipfile源码
if flags & 0x800:
# UTF-8 file names extension
filename = filename.decode('utf-8')
else:
# Historical ZIP filename encoding
filename = filename.decode('cp437')
filename = filename.encode('cp437').decode('gbk') #第一处
if fheader[_FH_GENERAL_PURPOSE_FLAG_BITS] & 0x800:
# UTF-8 filename
fname_str = fname.decode("utf-8")
else:
fname_str = fname.decode("cp437")
fname_str = fname_str.encode("cp437").decode('gbk') #第二处
3.11以上
zipfile.ZipFile(file_path, 'r',metadata_encoding='gbk')
评论已关闭