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

 更新时间:2018年03月22日 09:39:58   作者:tian544556  
下面小编就为大家分享一篇解决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后重新再手动转为正确的编码。

具体代码如下:

#修改代码
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')

后面一处同样如此修改

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文件是文件名乱码的问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Python djanjo之csrf防跨站攻击实验过程

    Python djanjo之csrf防跨站攻击实验过程

    csrf攻击,即cross site request forgery跨站(域名)请求伪造,这里的forgery就是伪造的意思。这篇文章主要给大家介绍了关于Python djanjo之csrf防跨站攻击的相关资料,需要的朋友可以参考下
    2021-05-05
  • Python办公自动化之CSV文件的运用和管理

    Python办公自动化之CSV文件的运用和管理

    Python办公⾃动化是利⽤Python编程语⾔来创建脚本和程序,以简化、加速和⾃动化⽇常办公任务和⼯作流程的过程,本文主要来介绍一下如何利用Python进行CSV文件的运用和管理,感兴趣的可以了解下
    2023-12-12
  • Python图像处理之给图片添加圆角效果的完整代码

    Python图像处理之给图片添加圆角效果的完整代码

    在日常的图像处理任务中,我们经常需要对图片进行一些美化和调整,今天,我将向大家介绍一个使用Python编程语言,结合PIL(Python Imaging Library)库,给图片添加圆角效果的方法,需要的朋友可以参考下
    2025-03-03
  • 在Linux命令行中运行Python脚本的流程步骤

    在Linux命令行中运行Python脚本的流程步骤

    Python是一种高级编程语言,被广泛应用于数据科学、机器学习、Web 开发等领域,在Linux操作系统中,Python是一个默认安装的解释器,用户可以通过命令行界面(CLI)来运行Python脚本,在本文中,我们将详细介绍如何在Linux命令行中运行Python脚本,需要的朋友可以参考下
    2023-11-11
  • Python 登录网站详解及实例

    Python 登录网站详解及实例

    这篇文章主要介绍了Python 登录网站详解及实例的相关资料,需要的朋友可以参考下
    2017-04-04
  • python操作redis数据库的三种方法

    python操作redis数据库的三种方法

    这篇文章主要介绍了python操作redis数据库的三种方法,帮助大家更好的理解和使用python,感兴趣的朋友可以了解下
    2020-09-09
  • python中使用正则表达式的方法详解

    python中使用正则表达式的方法详解

    这篇文章主要为大家详细介绍了python中使用正则表达式的方法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-03-03
  • 关于python DataFrame的合并方法总结

    关于python DataFrame的合并方法总结

    这篇文章主要介绍了关于python DataFrame的合并方法总结,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-07-07
  • Linux上使用Python统计每天的键盘输入次数

    Linux上使用Python统计每天的键盘输入次数

    这篇文章主要介绍了Linux上使用Python统计每天的键盘输入次数,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-04-04
  • python&MongoDB爬取图书馆借阅记录

    python&MongoDB爬取图书馆借阅记录

    这篇文章主要介绍了python&MongoDB爬取图书馆借阅记录的相关资料,需要的朋友可以参考下
    2016-02-02

最新评论