解决python3中解压zip文件是文件名乱码的问题
在zip标准中,对文件名的encoding用的不是unicode,而可能是各种软件根据系统的默认字符集来采用(此为猜测),因此zipfile中根据文件flag检测的时候,只支持cp437和utf-8。
具体就是查找zipfile.py源代码找到下面的代码:
1:ifflags&0x800:
2:#UTF-8filenamesextension
3:filename=filename.decode('utf-8')
4:else:
5:#HistoricalZIPfilenameencoding
6:filename=filename.decode('cp437')
可见编码被正确识别为utf8时的情况外,都会被识别并decode为cp437编码,但如果实际是gbk等其他编码时就变为乱码了。所以解决的方法在于被decode为cp437后重新再手动转为正确的编码。
具体代码如下:
#修改代码
ifflags&0x800:
#UTF-8filenamesextension
filename=filename.decode('utf-8')
else:
#HistoricalZIPfilenameencoding
filename=filename.decode('cp437')
#修改
filename=filename.encode("cp437").decode('gbk')
后面一处同样如此修改
ifzinfo.flag_bits&0x800:
#UTF-8filename
fname_str=fname.decode("utf-8")
else:
fname_str=fname.decode("cp437")
#修改
fname_str=fname_str.encode("cp437").decode('gbk')
亲测有效!
以上这篇解决python3中解压zip文件是文件名乱码的问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。
热门推荐
6 保研的祝福语简短
10 年轻20岁祝福语简短
11 朋友结婚祝福语信息简短
12 女孩婚礼贺卡祝福语简短
13 30段点歌简短祝福语
14 虎年春节祝福语图文简短
15 写给后妈祝福语大全简短
16 简短回复生日祝福语
17 校长送毕业祝福语简短
18 毕业立体贺卡祝福语简短