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 18 Python
python对excel文档去重及求和的实例
Apr 18 Python
django 发送邮件和缓存的实现代码
Jul 18 Python
Python 利用scrapy爬虫通过短短50行代码下载整站短视频
Oct 29 Python
在Mac上删除自己安装的Python方法
Oct 29 Python
Python 移动光标位置的方法
Jan 20 Python
python使用selenium实现批量文件下载
Mar 11 Python
详解用python实现基本的学生管理系统(文件存储版)(python3)
Apr 25 Python
numpy中的ndarray方法和属性详解
May 27 Python
django-rest-framework 自定义swagger过程详解
Jul 18 Python
Macbook安装Python最新版本、GUI开发环境、图像处理、视频处理环境详解
Feb 17 Python
linux中nohup和后台运行进程查看及终止
Jun 24 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
windows xp下安装pear
2006/12/02 PHP
PHP函数常用用法小结
2010/02/08 PHP
php格式化日期实例分析
2014/11/12 PHP
Laravel 5框架学习之Laravel入门和新建项目
2015/04/07 PHP
jQuery实现长文字部分显示代码
2013/05/13 Javascript
javascript上传图片前预览图片兼容大多数浏览器
2013/10/25 Javascript
js获取上传文件大小示例代码
2014/04/10 Javascript
JavaScript定义变量和变量优先级问题探讨
2014/10/11 Javascript
js实现图片点击左右轮播
2015/07/08 Javascript
JQ实现新浪游戏首页幻灯片
2015/07/29 Javascript
基于jQuery仿淘宝产品图片放大镜代码分享
2020/06/23 Javascript
js文字横向滚动特效
2015/11/11 Javascript
Node.js操作Firebird数据库教程
2016/03/04 Javascript
全面解析Bootstrap中transition、affix的使用方法
2016/05/30 Javascript
Easyui的组合框的取值与赋值
2016/10/28 Javascript
vue.js实现用户评论、登录、注册、及修改信息功能
2020/05/30 Javascript
Vue+Webpack完美整合富文本编辑器TinyMce的方法
2018/11/30 Javascript
js实现web调用摄像头 js截取视频画面
2019/04/21 Javascript
JS实现指定区域的全屏显示功能示例
2019/04/25 Javascript
layui点击左侧导航栏,实现不刷新整个页面,只刷新局部的方法
2019/09/25 Javascript
浅析JavaScript预编译和暗示全局变量
2020/09/03 Javascript
python中日期和时间格式化输出的方法小结
2015/03/19 Python
python计算对角线有理函数插值的方法
2015/05/07 Python
Python实现识别手写数字 简易图片存储管理系统
2018/01/29 Python
详解django中url路由配置及渲染方式
2019/02/25 Python
Python实现操纵控制windows注册表的方法分析
2019/05/24 Python
python 动态绘制爱心的示例
2020/09/27 Python
详解Python爬虫爬取博客园问题列表所有的问题
2021/01/18 Python
css3闪亮进度条效果实现思路及代码
2013/04/17 HTML / CSS
毕业自我鉴定
2013/11/05 职场文书
给儿子的表扬信
2014/01/15 职场文书
物业保安员岗位职责制度
2014/01/30 职场文书
老公给老婆的保证书
2014/04/28 职场文书
建筑安全责任书范本
2014/07/24 职场文书
七年级上册语文教学计划
2015/01/22 职场文书
TV动画《史上最强大魔王转生为村民A》番宣CM公布
2022/04/01 日漫