Python 2/3下处理cjk编码的zip文件的方法


Posted in Python onApril 26, 2019

今天项目中遇到了中文编码的zip文件,处理了蛮长时间,所以记录下,以免下次踩坑。

Python2下

Python2中读取zip文件,zipfile.ZipInfo的filename类型是str,基本上类似于python3中的bytes,即可以被decode为unicode。

所以,要处理中文,只需要将文件名按照编码decode成unicode就好。

import zipfile
fpath = '/path/to/zip.zip'
zfile = zipfile.ZipFile(fpath, 'r')
for fileinfo in zfile.filelist:
  print fileinfo.filename.decode('gb18030')
  # 如果要更加详细的区分bytes/str/unicode的语义
  print bytes(fileinfo.filename).decode('gb18030')

Python3下

Python3中,Language encoding flag (EFS)如果是1,则按照utf8来处理文件编码,EFS如果为0,则直接按照cp437解码文件名。这是标准直接规定的。

但是,很多软件在制作zip压缩包的时候,直接使用gb18030或者其他非标准编码格式来编码文件名,所以我们还得将文件名反转为bytes,然后再使用对应的编码方式解码:

fpath = '/path/to/zip.zip'
zfile = zipfile.ZipFile(fpath, 'r')
for fileinfo in zfile.filelist:
  print(fileinfo.filename.encode('cp437').decode('gb18030'))

方法都有了,那直接根据文件名智能猜测文件编码,然后解压就好。但是由于单个文件名太短,chardet的猜测可能不准,所以我们可以直接将所有的文件名连接起来,猜测编码。

代码请参考 mczip ,兼容python2和python3。

总结

以上所述是小编给大家介绍的Python 2/3下处理cjk编码的zip文件的方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Python 相关文章推荐
python uuid模块使用实例
Apr 08 Python
Python遍历目录的4种方法实例介绍
Apr 13 Python
Python实现曲线点抽稀算法的示例
Oct 12 Python
Python编程之黑板上排列组合,你舍得解开吗
Oct 30 Python
Python+tkinter使用40行代码实现计算器功能
Jan 30 Python
python利用百度AI实现文字识别功能
Nov 27 Python
Python实现字典按key或者value进行排序操作示例【sorted】
May 03 Python
python的re模块使用方法详解
Jul 26 Python
python实现将range()函数生成的数字存储在一个列表中
Apr 02 Python
Python pandas 列转行操作详解(类似hive中explode方法)
May 18 Python
python3中celery异步框架简单使用+守护进程方式启动
Jan 20 Python
一文带你掌握Pyecharts地理数据可视化的方法
Feb 06 Python
实例详解Matlab 与 Python 的区别
Apr 26 #Python
Python生成MD5值的两种方法实例分析
Apr 26 #Python
十个Python练手的实战项目,学会这些Python就基本没问题了(推荐)
Apr 26 #Python
Python生成rsa密钥对操作示例
Apr 26 #Python
python利用Opencv实现人脸识别功能
Apr 25 #Python
Python OpenCV利用笔记本摄像头实现人脸检测
Aug 20 #Python
python使用KNN算法识别手写数字
Apr 25 #Python
You might like
PHP foreach循环使用详解与实例代码
2010/05/08 PHP
Yii2针对指定url的生成及图片等的引入方法小结
2016/07/18 PHP
PHP实现的mysql读写分离操作示例
2018/05/22 PHP
php面试中关于面向对象的相关问题
2019/02/13 PHP
[全兼容哦]--实用、简洁、炫酷的页面转入效果loing
2007/05/07 Javascript
走出JavaScript初学困境—js初学
2008/12/29 Javascript
jQuery(1.3.2) 7行代码搞定跟随屏幕滚动的层
2009/05/21 Javascript
js弹窗代码 可以指定弹出间隔
2010/07/03 Javascript
有关于JS辅助函数inherit()的问题
2013/04/07 Javascript
jquery异步跨域访问代码
2013/06/28 Javascript
jquery五角星评分插件示例分享
2014/02/21 Javascript
javaScript知识点总结(必看篇)
2016/06/10 Javascript
AngularJS出现$http异步后台无法获取请求参数问题的解决方法
2016/11/03 Javascript
微信小程序链接传参并跳转新页面
2016/11/29 Javascript
Vue.js双向绑定实现原理详解
2016/12/22 Javascript
nodejs后台集成ueditor富文本编辑器的实例
2017/07/11 NodeJs
angularjs实现时间轴效果的示例代码
2017/11/29 Javascript
使用vue-cli+webpack搭建vue开发环境的方法
2017/12/22 Javascript
解决v-for中使用v-if或者v-bind:class失效的问题
2018/09/25 Javascript
微信小程序学习笔记之获取位置信息操作图文详解
2019/03/29 Javascript
python读取csv文件示例(python操作csv)
2014/03/11 Python
python条件变量之生产者与消费者操作实例分析
2017/03/22 Python
python抓取文件夹的所有文件
2018/02/27 Python
python读取csv文件并把文件放入一个list中的实例讲解
2018/04/27 Python
在python里从协程返回一个值的示例
2019/02/19 Python
树莓派实现移动拍照
2019/06/22 Python
PyQt5事件处理之定时在控件上显示信息的代码
2020/03/25 Python
Python 解析xml文件的示例
2020/09/29 Python
南非最大的在线时尚商店:Zando
2019/07/21 全球购物
如何用JQuery进行表单验证
2013/05/29 面试题
趣味比赛活动方案
2014/02/15 职场文书
年级组长自我鉴定
2014/02/22 职场文书
党员干部承诺书
2014/03/25 职场文书
多人股份制合作协议书
2016/03/19 职场文书
left join、inner join、right join的区别
2021/04/05 MySQL
MySQL的join buffer原理
2021/04/29 MySQL