[转载] python zip 文件解压中文乱码问题解决
参考链接: Python zip()
今天突然碰到zip文件解压后中文乱码问题。百度了下觉得这篇文章不错。保存保存。
来源:http://blog.sina.com.cn/s/blog_5805e98101012uzv.html
万恶的编码!!!!!!!!!! 学习 python 2.x 时就被时不时出现的中文乱码问题搞得头大,无奈用起来资料挺少、支持不多的 python 3.x,没想到昨天来解压缩一大堆文件时仍然遇到乱码的问题,对 python 3.x 失望之极。不得已,又拿起C#来解决。其实在C#中也有乱码的问题,最终是用 FileStream 变相解决的。 所以其实最初可能冤枉了 python 3.x 了,自它采用 unicode 之后,乱码问题其实少多了,有的时候还是不熟练。 今天又硬着头皮看 ZipFile 的源代码,在一堆英文资料中翻来翻去。其实这一 bug 已经早被提出来了,只是没有解决,可能是负责解决问题的大牛们都不用中文系统,尤其是都不用中文Windows系统,所以官方居然说已经修复了。
下面说一下原因及解决办法。
在zip标准中,对文件名的 encoding 用的不是 unicode,而可能是各种软件根据系统的默认字符集来采用(此为猜测),因此zipfile中根据文件 flag 检测的时候,只支持 cp437 和 utf-8。具体就是查找 zipfile.py 源代码找到下面的代码:
1: if flags & 0x800:
2: # UTF-8 file names extension
3: filename = filename.decode('utf-8')
4: else:
5: # Historical ZIP filename encoding
6: filename = filename.decode('cp437')
修改如下:
1: if sys.getfilesystemencoding()=='mbcs':
2: filename=filename.decode('mbcs')
3: elif flags & 0x800:
4: # UTF-8 file names extension
5: filename = filename.decode('utf-8')
6: else:
7: # Historical ZIP filename encoding
8: filename = filename.decode('cp437')
后面一处同样如此修改:
1: if sys.getfilesystemencoding()=='mbcs':
2: fname_str = fname.decode('mbcs')
3: elif zinfo.flag_bits & 0x800:
4: # UTF-8 filename
5: fname_str = fname.decode("utf-8")
6: else:
7: fname_str = fname.decode("cp437")
当然这种办法只是暂时性的解决了这一问题,可能在其它系统中采用会带来更多的问题。
[转载] python zip 文件解压中文乱码问题解决相关推荐
- zip压缩包解压中文乱码问题
zip压缩包解压中文乱码问题 zip格式中并没有指定编码格式,Windows下生成的zip文件中的编码是GBK/GB2312等,导致这些zip文件在Linux下解压时出现乱码问题,因为Linux下的默 ...
- linux php 压缩中文乱码,linux下zip文件解压乱码问题的解决办法分享
本篇文章主要介绍了解决linux下zip文件解压乱码问题,具有一定的参考价值,感兴趣的小伙伴们可以参考一下. 原因 由于zip格式并没有指定编码格式,Windows下生成的zip文件中的编码是GBK/ ...
- linux 解压文件乱码,云服务器:解决linux下zip文件解压乱码问题
云服务器:解决linux下zip文件解压乱码问题 原因 由于zip格式并没有指定编码格式,Windows下生成的zip文件中的编码是GBK/GB2312等,因此,导致这些zip文件在Linux下解压时 ...
- linux中zip文件编码错误,解决linux下zip文件解压乱码问题
原标题:解决linux下zip文件解压乱码问题 解决linux下zip文件解压乱码问题 原因 由于zip格式并没有指定编码格式,Windows下生成的zip文件中的编码是GBK/GB2312等,因此, ...
- Java实现Zip文件解压
2019独角兽企业重金招聘Python工程师标准>>> ##1. 两种java实现zip文件解压方式 使用JDK的原生类java.util.zip,上代码: import java. ...
- 解压文件到服务器是什么意思,linux中zip文件解压命令是什么
linux中zip文件解压命令是什么 发布时间:2020-10-15 14:35:15 来源:亿速云 阅读:102 作者:小新 这篇文章给大家分享的是有关linux中zip文件解压命令是什么的内容.小 ...
- android zip文件读写,【Android】Zip文件解压方法
android中zip文件解压 public class ZipUtil { /** * 解压到指定路径 * * @param inputStream * @param outPathString * ...
- C++实现解zip解压缩功能:将一个目录内的内容打包到zip文件以及将zip文件解压到某个目录(windows平台)
本例用来简单实现windows平台下如何将一个目录下的文件压缩到指定的zip文件中,亦或是将一个zip文件的内容解压缩到某个目录. 以下是源码,代码中的注释解释了相关操作,一看就懂. 注: 本例将这两 ...
- python zipfile extract 解压 中文文件名
python zipfile模块官网 正常使用: 解压缩: ZipFile.extract(member,path = None,pwd = None ) 参数 解释 members zipfile ...
最新文章
- tftp:timeout问题解决 - 从Windows传输文件到开发板
- R语言If、Else条件语句实战
- 1.2控制台的大体设置:
- c#后台线程更新界面
- 【最爽的日期工具包LocalDate·超爽,超实用】(Java8版本)
- C语言计算分段函数pta,PTA浙大版《C语言程序设计(第3版)》题目集 练习2-11 计算分段函数[2] (10分)...
- 2018计算机应用基础考试6,2018结构工程师《计算机应用基础》试题(6)
- popen 如何获取指令执行情况_Linux下使用popen()执行shell命令
- 查看linux上卸载mysql数据库_linux卸载mysql数据库
- linux 查找字母c结尾的内容,linux如何查找以某个字母打头的文件或文件夹 比如,/etc目录下很多文件,我想列出所有以c开头的文件或文件...
- oracle mos账号金额,mos账号注正册步骤+证书查询+注意事项.pptx
- jquery导入数据_python大数据实践之三:对分析结果可视化呈现
- 使用计算机粘贴板的步骤,电脑自带剪贴板怎么打开?剪贴板打开教程
- 《c 语言程序设计》宝钏,【黄钟】醉花阴_宝钏松金髻
- 后摩尔时代新星之自旋电子器件
- 鸡脚蹬子生长秘籍 鸡脚蹬子短是缺乏什么营养
- 《Linux内核情景分析》阅读笔记
- html跳转qq浏览器,导入其他书签
- 自定义Android消息推送提示音
- 你们知道工控资料窝吗
热门文章
- layer 父弹出框上弹出子弹框窗体大小问题
- 2020 CTF暑假夏令营培训Day1 安全杂项Misc
- 【基础】算法时空复杂度【OI缩水版】
- c++低通数字滤波器_快速扫盲之一阶RC低通数字滤波器算法实现
- mysql优化教程_Mysql优化一
- JAVA常用工具类→Date、SimpleDateFormat、Calendar、System、Math
- JAVA循环结构、break、continue、循环嵌套
- 管理系统中的计算机应用答案,《管理系统中计算机应用》试卷答案
- 芝加哥计算机科学硕士录取难度,美国cs研究生申请难度有多大?
- blob 按换行 分裂_Blob对象介绍