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中操作MySQL入门实例
Feb 08 Python
Python检测一个对象是否为字符串类的方法
May 21 Python
python基于xmlrpc实现二进制文件传输的方法
Jun 02 Python
在Python的Django框架中创建和使用模版
Jul 15 Python
Python调用ctypes使用C函数printf的方法
Aug 23 Python
Python使用正则表达式过滤或替换HTML标签的方法详解
Sep 25 Python
python实现微信接口(itchat)详细介绍
Oct 23 Python
Python实现嵌套列表及字典并按某一元素去重复功能示例
Nov 30 Python
python实现二叉树的遍历
Dec 11 Python
wxPython实现列表增删改查功能
Nov 19 Python
使用Pandas将inf, nan转化成特定的值
Dec 19 Python
Python如何使用paramiko模块连接linux
Mar 18 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实现的css文件背景图片下载器代码
2014/11/11 PHP
在CentOS系统上从零开始搭建WordPress博客的全流程记录
2016/04/21 PHP
THinkPHP获取客户端IP与IP地址查询的方法
2016/11/14 PHP
laravel框架实现后台登录、退出功能示例
2019/10/31 PHP
jquery实现带复选框的表格行选中删除时高亮显示
2013/08/01 Javascript
JavaScript对象属性检查、增加、删除、访问操作实例
2015/07/08 Javascript
Javascript验证方法大全
2015/09/21 Javascript
js电话号码验证方法
2015/09/28 Javascript
jquery实现网页的页面平滑滚动效果代码
2015/11/02 Javascript
AngularJS基础 ng-dblclick 指令用法
2016/08/01 Javascript
vue分页组件table-pagebar使用实例解析
2020/11/15 Javascript
谈谈JS中常遇到的浏览器兼容问题和解决方法
2016/12/17 Javascript
详解JS中的attribute属性
2017/04/25 Javascript
BootStrap 获得轮播中的索引和当前活动的焦点对象
2017/05/11 Javascript
vue实现word,pdf文件的导出功能
2018/07/31 Javascript
JS中‘hello’与new String(‘hello’)引出的问题详解
2018/08/14 Javascript
Node.js的进程管理的深入理解
2019/01/09 Javascript
JavaScript中0、空字符串、'0'是true还是false的知识点分享
2019/09/16 Javascript
使用vue引入maptalks地图及聚合效果的实现
2020/08/10 Javascript
JS中锚点链接点击平滑滚动并自由调整到顶部位置
2021/02/06 Javascript
python写xml文件的操作实例
2014/10/05 Python
Python中列表、字典、元组数据结构的简单学习笔记
2016/03/20 Python
基于Django的python验证码(实例讲解)
2017/10/23 Python
详解tensorflow载入数据的三种方式
2018/04/24 Python
Python函数基础实例详解【函数嵌套,命名空间,函数对象,闭包函数等】
2019/03/30 Python
在Keras中实现保存和加载权重及模型结构
2020/06/15 Python
python爬虫使用正则爬取网站的实现
2020/08/03 Python
Farah官方网站:男士服装及配件
2019/11/01 全球购物
领导干部考察材料
2014/02/08 职场文书
三分钟英语演讲稿
2014/04/24 职场文书
勤俭节约演讲稿
2014/05/08 职场文书
旅游专业毕业生自荐书
2014/06/30 职场文书
2015年网络管理员工作总结
2015/05/21 职场文书
小兵张嘎观后感300字
2015/06/03 职场文书
Python基础知识之变量的详解
2021/04/14 Python
教你使用Pandas直接核算Excel中快递费用
2021/05/12 Python