解决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守护进程(daemon)代码实例
Mar 06 Python
Python中的面向对象编程详解(下)
Apr 13 Python
在Python中使用zlib模块进行数据压缩的教程
Jun 26 Python
matplotlib简介,安装和简单实例代码
Dec 26 Python
pandas 读取各种格式文件的方法
Jun 22 Python
Python实用技巧之利用元组代替字典并为元组元素命名
Jul 11 Python
详解windows python3.7安装numpy问题的解决方法
Aug 13 Python
Python使用logging模块实现打印log到指定文件的方法
Sep 05 Python
Python爬虫设置代理IP(图文)
Dec 23 Python
Python设计模式之组合模式原理与用法实例分析
Jan 11 Python
python 如何用urllib与服务端交互(发送和接收数据)
Mar 04 Python
python读取并查看npz/npy文件数据以及数据显示方法
Apr 14 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中用文本文件做数据库的实现方法
2008/03/27 PHP
PHP教程 基本语法
2009/10/23 PHP
控制PHP的输出:缓存并压缩动态页面
2013/06/11 PHP
php格式输出文件var_export函数实例
2014/11/15 PHP
实例讲解如何在PHP的Yii框架中进行错误和异常处理
2016/03/17 PHP
jQuery 瀑布流 绝对定位布局(二)(延迟AJAX加载图片)
2012/05/23 Javascript
探讨js字符串数组拼接的性能问题
2014/10/11 Javascript
JS实现让网页背景图片斜向移动的方法
2015/02/25 Javascript
Jquery时间轴特效(三种不同类型)
2015/11/02 Javascript
Node.js实用代码段之获取Buffer对象字节长度
2016/03/17 Javascript
需灵活掌握的Bootstrap预定义排版类 你精通吗?
2016/06/20 Javascript
JS简单设置下拉选择框默认值的方法
2016/08/20 Javascript
Vue封装Swiper实现图片轮播效果
2018/02/06 Javascript
ES6知识点整理之对象解构赋值应用示例
2019/04/17 Javascript
VUE 实现复制内容到剪贴板的两种方法
2019/04/24 Javascript
使用layui实现树形结构的方法
2019/09/20 Javascript
微信小程序国际化探索实现(附源码地址)
2020/05/20 Javascript
element 动态合并表格的步骤
2020/12/31 Javascript
如何使用 Pylint 来规范 Python 代码风格(来自IBM)
2018/04/06 Python
pandas将numpy数组写入到csv的实例
2018/07/04 Python
python实现AES加密和解密
2019/03/27 Python
Python企业编码生成系统之系统主要函数设计详解
2019/07/26 Python
Django实现随机图形验证码的示例
2020/10/15 Python
使用Python解析Chrome浏览器书签的示例
2020/11/13 Python
CSS3 选择器 基本选择器介绍
2012/01/21 HTML / CSS
css3 实现滚动条美化效果的实例代码
2021/01/06 HTML / CSS
Html5画布_动力节点Java学院整理
2017/07/13 HTML / CSS
Application Cache未缓存文件无法访问无法加载问题
2014/05/31 HTML / CSS
澳洲在线厨具商店:Kitchen Style
2018/05/05 全球购物
德国家具折扣店:POCO
2020/02/28 全球购物
巴西Bo.Bô官方在线商店:经营奢侈品时尚业务
2020/03/16 全球购物
信息总监管理职责范本
2014/03/08 职场文书
车辆转让协议书
2014/04/15 职场文书
2014大四本科生自我鉴定总结
2014/10/04 职场文书
2015年安全生产工作总结范文
2015/04/02 职场文书
2015年度村委会工作总结
2015/04/29 职场文书