解决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根据出生年份简单计算生肖的方法
Mar 27 Python
python使用fileinput模块实现逐行读取文件的方法
Apr 29 Python
详解Python使用simplejson模块解析JSON的方法
Mar 24 Python
python 对象和json互相转换方法
Mar 22 Python
使用Django启动命令行及执行脚本的方法
May 29 Python
Python定时任务sched模块用法示例
Jul 16 Python
Python文件如何引入?详解引入Python文件步骤
Dec 10 Python
numpy中的meshgrid函数的使用
Jul 31 Python
django2.2安装错误最全的解决方案(小结)
Sep 24 Python
Transpose 数组行列转置的限制方式
Feb 11 Python
python实现简单的井字棋
May 26 Python
Python之matplotlib绘制饼图
Apr 13 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
PR值查询 | PageRank 查询
2006/12/20 PHP
php学习笔记之 函数声明(二)
2011/06/09 PHP
php防止站外远程提交表单的方法
2014/10/20 PHP
PHP之sprintf函数用法详解
2014/11/12 PHP
PHP AjaxForm提交图片上传并显示图片源码
2016/11/29 PHP
PHP反射原理与用法深入分析
2019/09/28 PHP
PHP实现Markdown文章上传到七牛图床的实例内容
2020/02/11 PHP
PHP论坛实现积分系统的思路代码详解
2020/06/01 PHP
Javascript 调试利器 Firebug使用详解六
2009/07/05 Javascript
PPK 谈 JavaScript 的 this 关键字 [翻译]
2009/09/29 Javascript
使用js操作cookie的一点小收获分享
2013/09/03 Javascript
百度移动版的url编码解码示例
2014/04/29 Javascript
js实现点击添加一个input节点
2014/12/05 Javascript
学习JavaScript设计模式(代理模式)
2015/12/03 Javascript
Javascript数组Array方法解读
2016/03/13 Javascript
微信小程序  Mustache语法详细介绍
2016/10/27 Javascript
JavaScript 总结几个提高性能知识点(推荐)
2017/02/20 Javascript
JavaScript数据结构与算法之二叉树添加/删除节点操作示例
2019/03/01 Javascript
搭建Vue从Vue-cli到router路由护卫的实现
2019/11/14 Javascript
Python3学习urllib的使用方法示例
2017/11/29 Python
Django 生成登陆验证码代码分享
2017/12/12 Python
浅谈使用Python内置函数getattr实现分发模式
2018/01/22 Python
python提取图像的名字*.jpg到txt文本的方法
2018/05/10 Python
django框架自定义用户表操作示例
2018/08/07 Python
tensorflow的计算图总结
2020/01/12 Python
python正则表达式 匹配反斜杠的操作方法
2020/08/07 Python
python+openCV对视频进行截取的实现
2020/11/27 Python
Willer台湾:日本高速巴士/夜行巴士预约
2017/07/09 全球购物
英国女士家居服网站:hush
2017/08/09 全球购物
留学推荐信写作指南
2014/01/25 职场文书
材料员岗位职责
2014/03/13 职场文书
股东合作协议书
2014/04/14 职场文书
离婚协议书怎么写(范本参考)
2014/09/30 职场文书
11.9消防日宣传标语
2014/10/08 职场文书
2016年感恩母亲节活动总结
2016/04/01 职场文书
MySQL实例精讲单行函数以及字符数学日期流程控制
2021/10/15 MySQL