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脚本操作MongoDB的教程
Apr 16 Python
浅析Python的Django框架中的Memcached
Jul 23 Python
简单理解Python中的装饰器
Jul 31 Python
python解决js文件utf-8编码乱码问题(推荐)
May 02 Python
Python 一句话生成字母表的方法
Jan 02 Python
Python字典对象实现原理详解
Jul 01 Python
python set内置函数的具体使用
Jul 02 Python
Python之虚拟环境virtualenv,pipreqs生成项目依赖第三方包的方法
Jul 23 Python
详解python内置模块urllib
Sep 09 Python
python实现猜拳游戏项目
Nov 30 Python
Django使用django-simple-captcha做验证码的实现示例
Jan 07 Python
python 制作本地应用搜索工具
Feb 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序列化操作方法分析
2016/09/28 PHP
php_pdo 预处理语句详解
2016/11/21 PHP
详解PHP防止盗链防止迅雷下载的方法
2017/04/26 PHP
发两个小东西,ASP/PHP 学习工具。 用JavaScript写的
2007/04/12 Javascript
用 JSON 处理缓存
2007/04/27 Javascript
非常强大的 jQuery.AsyncBox 弹出对话框插件
2011/08/29 Javascript
单击复制文字兼容各浏览器的完美解决方案
2013/07/04 Javascript
JavaScript插件化开发教程 (三)
2015/01/27 Javascript
使用bootstrap3开发响应式网站
2016/05/12 Javascript
EXT中单击button按钮grid添加一行(光标位置可设置)的实例代码
2016/06/02 Javascript
有趣的bootstrap走动进度条
2016/12/01 Javascript
JS中闭包的经典用法小结(2则示例)
2016/12/28 Javascript
原生js实现选项卡功能
2017/03/08 Javascript
Flask中获取小程序Request数据的两种方法
2017/05/12 Javascript
Validform验证时可以为空否则按照指定格式验证
2017/10/20 Javascript
Bootstrap Fileinput 4.4.7文件上传实例详解
2018/07/25 Javascript
Vue常用指令详解分析
2018/08/19 Javascript
Fetch超时设置与终止请求详解
2019/05/18 Javascript
js实现星星海特效的示例
2020/09/28 Javascript
[02:38]DOTA2亚洲邀请赛小组赛精彩集锦:Wings完美团击溃对手
2017/03/29 DOTA
python操作xml文件示例
2014/04/07 Python
python输出当前目录下index.html文件路径的方法
2015/04/28 Python
python 实现一个贴吧图片爬虫的示例
2017/10/12 Python
Python对excel文档的操作方法详解
2018/12/10 Python
python matplotlib拟合直线的实现
2019/11/19 Python
关于Numpy中的行向量和列向量详解
2019/11/30 Python
基于python的opencv图像处理实现对斑马线的检测示例
2020/11/29 Python
让IE可以变相支持CSS3选择器
2010/01/21 HTML / CSS
html5视频自动横过来自适应页面且点击播放功能的实现
2020/06/03 HTML / CSS
电子商务专业求职信
2014/03/08 职场文书
作风转变年心得体会
2014/10/22 职场文书
党校党性分析材料
2014/12/19 职场文书
2015年党员干部承诺书
2015/01/21 职场文书
支教个人总结
2015/03/04 职场文书
spring cloud 配置中心客户端启动遇到的问题
2021/09/25 Java/Android
HttpClient实现表单提交上传文件
2022/08/14 Java/Android