解决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 相关文章推荐
wxpython 学习笔记 第一天
Mar 16 Python
Python实现截屏的函数
Jul 26 Python
Python中return语句用法实例分析
Aug 04 Python
python队列通信:rabbitMQ的使用(实例讲解)
Dec 22 Python
Python/Django后端使用PIL Image生成头像缩略图
Apr 30 Python
Python列表(list)所有元素的同一操作解析
Aug 01 Python
使用Python实现正态分布、正态分布采样
Nov 20 Python
解决django中form表单设置action后无法回到原页面的问题
Mar 13 Python
解决Pycharm双击图标启动不了的问题(JetBrains全家桶通用)
Aug 07 Python
TensorFlow的环境配置与安装方法
Feb 20 Python
详解Python中的for循环
Apr 30 Python
Python tensorflow卷积神经Inception V3网络结构
May 06 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
thinkPHP5.0框架引入Traits功能实例分析
2017/03/18 PHP
ThinkPHP中create()方法自动验证表单信息
2017/04/28 PHP
php简单处理XML数据的方法示例
2017/05/19 PHP
PHP Trait功能与用法实例分析
2020/06/03 PHP
基于jQuery的图片左右无缝滚动插件
2012/05/23 Javascript
JS获取网页属性包括宽、高等等
2014/04/03 Javascript
javascript常见操作汇总
2014/09/03 Javascript
seajs学习之模块的依赖加载及模块API的导出
2016/10/20 Javascript
原生js封装自定义滚动条
2017/03/24 Javascript
浅谈vue中慎用style的scoped属性
2017/11/28 Javascript
vue移动端屏幕适配详解
2019/04/30 Javascript
浅谈vue限制文本框输入数字的正确姿势
2019/09/02 Javascript
vue中使用element ui的弹窗与echarts之间的问题详解
2019/10/25 Javascript
jquery检测上传文件大小示例
2020/04/26 jQuery
vue实现信息管理系统
2020/05/30 Javascript
Django rest framework实现分页的示例
2018/05/24 Python
Django中间件实现拦截器的方法
2018/06/01 Python
Tesserocr库的正确安装方式
2018/10/19 Python
python批量识别图片指定区域文字内容
2019/04/30 Python
spyder 在控制台(console)执行python文件,debug python程序方式
2020/04/20 Python
Pytorch之Tensor和Numpy之间的转换的实现方法
2020/09/03 Python
Petmate品牌官方网站:宠物用品
2018/11/25 全球购物
日本最大的购物网站:日本乐天市场(Rakuten Ichiba)
2020/11/04 全球购物
ajax是什么及其工作原理
2012/02/08 面试题
促销活动策划方案
2014/01/12 职场文书
消防安全管理制度
2014/02/01 职场文书
人事任命书范文
2014/06/04 职场文书
中学生秋季运动会广播稿
2014/09/21 职场文书
习总书记三严三实学习心得体会
2014/10/13 职场文书
青年文明号申报材料
2014/12/23 职场文书
新员工考核评语
2014/12/31 职场文书
幼儿园教师节活动总结
2015/03/23 职场文书
歌舞青春观后感
2015/06/10 职场文书
2019年世界儿童日宣传标语
2019/11/22 职场文书
Arthas排查Kubernetes中应用频繁挂掉重启异常
2022/02/28 MySQL
你真的会用Mysql的explain吗
2022/03/31 MySQL