在写一个自动化处理工具,用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')

参考https://www.jb51.net/python/2957879by.htm

标签: none

添加新评论