gpt4 book ai didi

解决python3中解压zip文件是文件名乱码的问题

转载 作者:qq735679552 更新时间:2022-09-28 22:32:09 26 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章解决python3中解压zip文件是文件名乱码的问题由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

在zip标准中,对文件名的 encoding 用的不是 unicode,而可能是各种软件根据系统的默认字符集来采用(此为猜测),因此zipfile中根据文件 flag 检测的时候,只支持 cp437 和 utf-8.

具体就是查找 zipfile.py 源代码找到下面的代码:

1: if flags & 0x800: 2: # UTF-8 file names extension 3: filename = filename.decode('utf-8') 4: else: 5: # Historical ZIP filename encoding 6: filename = filename.decode('cp437') 。

可见编码被正确识别为utf8时的情况外,都会被识别并decode为cp437编码,但如果实际是gbk等其他编码时就变为乱码了。所以解决的方法在于被decode为cp437后重新再手动转为正确的编码.

具体代码如下:

?
1
2
3
4
5
6
7
8
9
#修改代码
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')

后面一处同样如此修改 。

?
1
2
3
4
5
6
7
if zinfo.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')

亲测有效! 。

以上这篇解决python3中解压zip文件是文件名乱码的问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我.

原文链接:http://blog.csdn.net/tian544556/article/details/78635840 。

最后此篇关于解决python3中解压zip文件是文件名乱码的问题的文章就讲到这里了,如果你想了解更多关于解决python3中解压zip文件是文件名乱码的问题的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com