在zip标准中,对文件名的编码用的不是unicode,而可能是各种软件根据系统的默认字符集来采用(此为猜测),因此zipfile中根据文件旗检测的时候,只支持cp437和utf - 8。
1:如果旗帜,0 x800:
2:# utf - 8的文件名扩展
3:文件名=filename.decode (utf - 8)
4:其他:
5:#历史ZIP文件名编码
6:文件名=filename.decode (cp437)
可见编码被正确识别为utf8时的情况外,都会被识别并解码为cp437编码,但如果实际是gbk等其他编码时就变为乱码了,所以解决的方法在于被解码为cp437后重新再手动转为正确的编码。
#修改代码 如果旗帜,0 x800: # utf - 8的文件名扩展 文件名=filename.decode (utf - 8) 其他: #历史ZIP文件名编码 文件名=filename.decode (“cp437”) #修改 文件名=filename.encode (cp437) .decode (gbk)
<强>后面一处同样如此修改强>
如果zinfo。flag_bits,0 x800: # utf - 8文件名 fname_str=fname.decode (“utf - 8”) 其他: fname_str=fname.decode (“cp437”) #修改 fname_str=fname_str.encode (cp437) .decode (gbk)
亲测有效!
以上这篇解决python3中解压压缩文件是文件名乱码的问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。