乱码原因不做赘述, 请参考 解决Python中ZipFile解压文件名中文乱码的问题
解决方案:
'''
Author: DragonFang myworkdragon@163.com
Date: 2024-02-28 14:58:14
LastEditors: DragonFang myworkdragon@163.com
LastEditTime: 2024-03-28 15:02:35
Desc: Description
'''
def support_auto_decode(zip_file: ZipFile, decode=None):
name_to_info = zip_file.NameToInfo
for name, info in name_to_info.copy().items():
if info.flag_bits & 0x800:
# UTF-8 file names extension
# filename = filename.decode('utf-8')
# UTF8 不做处理
continue
else:
temp_decode = decode
real_name = name.encode("cp437")
# 预测 decode
if decode is None:
dammit = UnicodeDammit(real_name)
temp_decode = dammit.detector.chardet_encoding
real_name = real_name.decode(temp_decode)
info.filename = real_name
del name_to_info[name]
name_to_info[real_name] = info
return zip_file