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


Posted in Python onMarch 22, 2018

在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 相关文章推荐
以911新闻为例演示Python实现数据可视化的教程
Apr 23 Python
python实现对一个完整url进行分割的方法
Apr 29 Python
python对url格式解析的方法
May 13 Python
Python使用multiprocessing创建进程的方法
Jun 04 Python
python操作redis的方法
Jul 07 Python
Python中static相关知识小结
Jan 02 Python
Django中使用第三方登录的示例代码
Aug 20 Python
Python中fnmatch模块的使用详情
Nov 30 Python
Python实现SQL注入检测插件实例代码
Feb 02 Python
解决django服务器重启端口被占用的问题
Jul 26 Python
Python文字截图识别OCR工具实例解析
Mar 05 Python
基于pandas向csv添加新的行和列
May 25 Python
Python爬虫工程师面试问题总结
Mar 22 #Python
Python入门必须知道的11个知识点
Mar 21 #Python
python使用Tesseract库识别验证
Mar 21 #Python
python如何派生内置不可变类型并修改实例化行为
Mar 21 #Python
python如何通过实例方法名字调用方法
Mar 21 #Python
python如何为被装饰的函数保留元数据
Mar 21 #Python
15行Python代码带你轻松理解令牌桶算法
Mar 21 #Python
You might like
php 中文字符串首字母的获取函数分享
2013/11/04 PHP
php遍历类中包含的所有元素的方法
2015/05/12 PHP
js获取某元素的class里面的css属性值代码
2014/01/16 Javascript
JavaScript Math.floor方法(对数值向下取整)
2015/01/09 Javascript
JavaScript实现窗口抖动效果
2016/10/19 Javascript
浅谈js数组和splice的用法
2016/12/04 Javascript
React Js 微信禁止复制链接分享禁止隐藏右上角菜单功能
2017/05/26 Javascript
Vue学习笔记之表单输入控件绑定
2017/09/05 Javascript
Angular动画实现的2种方式以及添加购物车动画实例代码
2018/08/09 Javascript
Angular父子组件通过服务传参的示例方法
2018/10/31 Javascript
vue项目搭建以及全家桶的使用详细教程(小结)
2018/12/19 Javascript
Vue代码整洁之去重方法整理
2019/08/06 Javascript
JavaScript数组去重实现方法小结
2020/01/17 Javascript
[29:10]Ti4 冒泡赛第二天 NEWBEE vs Titan 3
2014/07/15 DOTA
[02:23]完美世界全国高校联赛街访DOTA2第一期
2019/11/28 DOTA
[06:07]DOTA2-DPC中国联赛 正赛 Ehome vs VG 选手采访
2021/03/11 DOTA
Python Queue模块详细介绍及实例
2016/12/27 Python
Python读取mat文件,并转为csv文件的实例
2018/07/04 Python
使用Python做垃圾分类的原理及实例代码附源码
2019/07/02 Python
使用pandas读取文件的实现
2019/07/31 Python
用django设置session过期时间的方法解析
2019/08/05 Python
python数据类型之间怎么转换技巧分享
2019/08/20 Python
Python selenium如何打包静态网页并下载
2020/08/12 Python
使用HTML5的链接预取功能(link prefetching)给网站提速
2012/12/13 HTML / CSS
德国隐形眼镜店:LuckyLens
2018/07/29 全球购物
趣味体育活动方案
2014/02/08 职场文书
2014广电局实施党的群众路线教育实践活动方案思想汇报
2014/09/22 职场文书
党的群众路线教育实践活动个人整改措施范文
2014/11/04 职场文书
2014年会计工作总结
2014/11/27 职场文书
新郎父母婚礼致辞
2015/07/27 职场文书
党校团干班培训心得体会
2016/01/06 职场文书
2016大一新生入学教育心得体会
2016/01/23 职场文书
详解nodejs内置模块
2021/05/06 NodeJs
使用python创建股票的时间序列可视化分析
2022/03/03 Python
SQL试题 使用窗口函数选出连续3天登录的用户
2022/04/24 Oracle
详解ZABBIX监控ESXI主机的问题
2022/06/21 Servers