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的requests第三方模块抓取王者荣耀所有英雄的皮肤实例
Dec 14 Python
windows下python和pip安装教程
May 25 Python
[原创]Python入门教程1. 基本运算【四则运算、变量、math模块等】
Oct 28 Python
python列表使用实现名字管理系统
Jan 30 Python
Python3爬楼梯算法示例
Mar 04 Python
python3对接mysql数据库实例详解
Apr 30 Python
pandas DataFrame 交集并集补集的实现
Jun 24 Python
python字典排序的方法
Oct 12 Python
python GUI库图形界面开发之PyQt5动态加载QSS样式文件
Feb 25 Python
PyPDF2读取PDF文件内容保存到本地TXT实例
May 12 Python
在django中查询获取数据,get, filter,all(),values()操作
Aug 09 Python
Python爬取豆瓣数据实现过程解析
Oct 27 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获取php,mysql,apche的版本信息示例代码
2014/01/16 PHP
ecshop后台编辑器替换成ueditor编辑器
2015/03/03 PHP
php使用Jpgraph绘制饼状图的方法
2015/06/10 PHP
PHP使用微信开发模式实现搜索已发送图文及匹配关键字回复的方法
2017/09/13 PHP
PHP PDOStatement::fetchAll讲解
2019/01/31 PHP
从父页面读取和操作iframe中内容方法
2009/07/25 Javascript
深入理解JS中的变量及作用域、undefined与null
2014/03/04 Javascript
返回顶部按钮响应滚动且动态显示与隐藏
2014/10/14 Javascript
JavaScript+html5 canvas绘制的小人效果
2016/01/27 Javascript
JavaScript常用函数工具集:lao-utils
2016/03/01 Javascript
DOM中事件处理概览与原理的全面解析
2016/08/16 Javascript
移动端js触摸事件详解
2016/09/18 Javascript
easyui tree带checkbox实现单选的简单实例
2016/11/07 Javascript
vue获取元素宽、高、距离左边距离,右,上距离等还有XY坐标轴的方法
2018/09/05 Javascript
使用Sonarqube扫描Javascript代码的示例
2018/12/26 Javascript
vuex vue简单使用知识点总结
2019/08/29 Javascript
浅谈Vue组件单元测试究竟测试什么
2020/02/05 Javascript
selenium+python自动化测试之环境搭建
2019/01/23 Python
完美解决python3.7 pip升级 拒绝访问问题
2019/07/12 Python
Python使用random模块生成随机数操作实例详解
2019/09/17 Python
解决Python中导入自己写的类,被划红线,但不影响执行的问题
2020/07/13 Python
使用Python封装excel操作指南
2021/01/29 Python
CSS3实现苹果手机解锁的字体闪亮效果示例
2021/01/05 HTML / CSS
W Concept美国:精选全球独立设计师
2017/02/22 全球购物
GEOX鞋美国官方网站:意大利会呼吸的鞋
2017/07/12 全球购物
Doyoueven官网:澳大利亚健身服饰和配饰品牌
2019/03/24 全球购物
业务部门经理岗位职责
2014/02/23 职场文书
赔偿协议书范本
2014/04/15 职场文书
销售员岗位职责
2014/06/09 职场文书
公共场所禁烟倡议书
2014/08/30 职场文书
村党支部群众路线教育实践活动对照检查材料
2014/09/26 职场文书
初一年级组工作总结
2015/08/12 职场文书
详解MySQL事务的隔离级别与MVCC
2021/04/22 MySQL
python使用pywinauto驱动微信客户端实现公众号爬虫
2021/05/19 Python
将MySQL的表数据全量导入clichhouse库中
2022/03/21 MySQL
mysql数据插入覆盖和时间戳的问题及解决
2022/03/25 MySQL