解决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(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。