解决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 相关文章推荐
Python中文件遍历的两种方法
Jun 16 Python
详解Python中的join()函数的用法
Apr 07 Python
python迭代器与生成器详解
Mar 10 Python
Python中断言Assertion的一些改进方案
Oct 27 Python
python 按不同维度求和,最值,均值的实例
Jun 28 Python
python的schedule定时任务模块二次封装方法
Feb 19 Python
使用Django搭建一个基金模拟交易系统教程
Nov 18 Python
如何在mac环境中用python处理protobuf
Dec 25 Python
python多进程 主进程和子进程间共享和不共享全局变量实例
Apr 25 Python
python属于软件吗
Jun 18 Python
python使用隐式循环快速求和的实现示例
Sep 11 Python
python 实现关联规则算法Apriori的示例
Sep 30 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.ini中date.timezone设置分析
2011/07/29 PHP
用js实现随机返回数组的一个元素
2007/08/13 Javascript
Jquery 基础学习笔记
2009/05/29 Javascript
用 Javascript 验证表单(form)中的单选(radio)值
2009/09/08 Javascript
简单的jquery拖拽排序效果实现代码
2011/09/20 Javascript
JS实现兼容各浏览器解析XML文档数据的方法
2015/06/01 Javascript
JQuery悬停控制图片轮播——代码简单
2015/08/05 Javascript
jQuery实现布局高宽自适应的简单实例
2016/05/28 Javascript
js实现文字选中分享功能
2017/01/25 Javascript
electron demo项目npm install安装失败的解决方法
2018/02/06 Javascript
vue实现文字加密功能
2019/09/27 Javascript
JS实现简单打字测试
2020/06/24 Javascript
[46:47]2014 DOTA2国际邀请赛中国区预选赛 DT VS HGT
2014/05/22 DOTA
使用Python下的XSLT API进行web开发的简单教程
2015/04/15 Python
python读取word文档的方法
2015/05/09 Python
Python字符串匹配算法KMP实例
2015/07/18 Python
Python将多份excel表格整理成一份表格
2018/01/03 Python
Python loguru日志库之高效输出控制台日志和日志记录
2020/03/07 Python
解决windows下python3使用multiprocessing.Pool出现的问题
2020/04/08 Python
python中的错误如何查看
2020/07/08 Python
python drf各类组件的用法和作用
2021/01/12 Python
Python中的流程控制详解
2021/02/18 Python
使用CSS禁止textarea调整大小功能的方法
2015/03/13 HTML / CSS
浅谈Html5中视频 音频标签 进度条的问题
2016/07/26 HTML / CSS
AmazeUI折叠式卡片布局,整合内容列表、表格组件实现
2020/08/20 HTML / CSS
瀑布模型都有哪些优缺点
2014/06/23 面试题
出国留学自荐信
2013/10/25 职场文书
法学毕业生自我鉴定
2014/01/31 职场文书
领导干部贪图享乐整改措施
2014/09/21 职场文书
大学生档案自我鉴定(2篇)
2014/10/14 职场文书
离婚协议书格式
2014/11/21 职场文书
党员进社区活动总结
2015/05/07 职场文书
民事诉讼答辩状范文
2015/05/21 职场文书
胡桃夹子观后感
2015/06/11 职场文书
运动会新闻报道稿
2015/07/22 职场文书
小学班长竞选稿
2015/11/20 职场文书