zipfile文件名乱码问题

接到一个解压zip文件的任务。在几百G的文件里面找到zip文件,并解压到当前目录。这个任务看似很简单,但是全都是坑的。

被坑的第一点,文件名乱码。搜索博客里面的教程,一般有两种方法。1、修改源码,把cp437编码换成gbk。2、decode cp437 再 encode gbk。

这两种方案都只能适应一些场景而已,因为zip的压缩工具本来就是混乱的。

我来说说第一种方案的坑点,并非所有的zip文件都是通过flag_bits来控制是utf-8还是别的编码的。例如,一个flag_bits标记为非utf-8的文件名,你直接修改源码转gbk,则很有可能会gbk can not decode error 。

第二种,方案同样有像似的问题。一个utf-8的文件名因为flag_bits的错误。然后,你就无法区分是到底是 decode cp437 还是 utf-8。

所以,正确的方法是读取flag_bits,decode cp437 或者 utf-8 还原成二进制数据。然后,再使用chardet猜测编码,如果猜测不出来,应该指定utf-8编码、然后再使用gbk。

是的,这个编码还是要靠猜的。

解压文件的另外一个坑点

我也不知道为啥,压缩文件的路径上,有的文件夹的尾部是一个空格。这导致,解压后的文件夹。有内容,但是打开是看不到文件的。

我使用rar工具进行解压。发现,工具会把尾部的空格替换成下划线。

结果

经过这些修改,终于这几百G的文件,扫描出来的zip,可以成功解压。有60G大小。而且,文件名都可以还原。没有乱码的情况。

python zipfile 乱码_python zipfile文件名乱码问题相关推荐

  1. python extractall函数_python zipfile extract 解压 中文文件名[图]

    python zipfile extract 解压 中文文件名[图] 08-01栏目:技术 TAG:extractall extractall Python zipfile模块官网 copyright ...

  2. python列表存储乱码_python 列表中文乱码

    今天在学习python列表的时候遇到中文乱码问题,如下: # -*- coding: UTF-8 -*- print "列表" list1 = ['张三',"李四&quo ...

  3. linux服务器文件名称乱码,linux中文文件名乱码怎么解决?

    由于安装英文版的系统不支持中文,出现中文文件名乱码. 下面操作时在centos上安装中文支持: 1)先下载并安装两个语言包: fonts-chinese-3.02-12.el5.noarch.rpm ...

  4. 报表服务器导出报表文件名乱码,excel 导出文件名乱码

    因为经常要用到导出功能,之前因为文件名乱码,所以都用英文或是拼音缩写来代替,今天特意要接觉下这个问题.顺便记录下.望对小白有用. /** * 导出结算详情列表 * @return */ public ...

  5. git linux 文件名乱码,git 中文文件名乱码

    git 中文文件名 乱码 mac git 默认中文文件名是 \xxx\xxx 等八进制形式 是因为 对0x80以上的字符进行quote 只需要 git config –global core.quot ...

  6. linux 文件夹 乱码,linux中文文件名乱码解决

    原标题:linux中文文件名乱码解决 由于安装英文版的系统不支持中文,出现中文文件名乱码.下面操作时在centos上安装中文支持. 1)先下载并安装两个语言包: fonts-chinese-3.02- ...

  7. python 写入csv 文件显示乱码_python 写入csv乱码问题解决方法

    需求背景 最近为公司开发了一套邮件日报程序,邮件一般就是表格,图片,然后就是附件.附件一般都是默认写到txt文件里,但是PM希望邮件里的附件能直接用Excel这种软件打开,最开始想保存为Excel,但 ...

  8. python os.path.join乱码_python os.listdir()乱码解决方案

    计算机一般来说是需要定期的清理,系统的内存不能无限延伸,同时有一些不需要的文件也可以得以清除掉.有些人会使用os.remove来进行文件的清楚,从而导致一些错误的出现,可以说这是对于os.remove ...

  9. python写入mysql乱码_python MYsql中文乱码

    以前用php连mssqy时也经常出现中文乱码(中文变问号)的问题,那时就明白是编码没设置好导航,现在的Python连mssql数据库也同样出现这问题,问题一样,解决的办法当然也会相似,现在我们来看看解 ...

最新文章

  1. 百度15篇论文被AAAI 2019收录
  2. [云炬创业学笔记]第二章决定成为创业者测试10
  3. 聊聊高并发(二十三)解析java.util.concurrent各个组件(五) 深入理解AQS(三)
  4. Flink 零基础实战教程:如何计算实时热门商品
  5. 网站留言板防重复留言_2020微信公众号怎么开通原创、赞赏、留言功能?【5月更新】...
  6. 机器学习(九)初识BP神经网络
  7. (7)ISE14.7无用引脚设置上下拉或高阻态(FPGA不积跬步101)
  8. r 重命名 列名_R-reshape2
  9. 我为什么不喜欢网赚和SEO
  10. java 有界泛型_JAVA泛型中的有界类型(extends super)
  11. [转]UBB代码解析规范
  12. java大写转小写_Java字母大小写转换的方法
  13. Java工程师 数据结构与算法 数组面试题(Day40)
  14. 《玩透嵌入式C的角角落落》深入分析sprintf和printf函数
  15. python爬豆瓣top250书籍_python爬虫练习-爬取豆瓣图书top250
  16. excel打开2个独立窗口_66㎡ 的公寓,竟能安排下 2个卧室和独立马桶间?
  17. 次坐标从0开始_中考热点专题突破精讲精练3: 与坐标系中的有关热点问题
  18. 攻防世界--看雪看雪看雪
  19. 淘宝UED设计流程理解
  20. 前端开发基础(HTML基础)

热门文章

  1. AndroidStudio 3.4更新了啥?(转载)
  2. php算法入门,a011.PHP实战:加密解密,简单算法入门
  3. php基础 简书,PHP入门基础
  4. go 微服务框架_清晰架构(Clean Architecture)的Go微服务
  5. ROS 学习笔记(二):自定义消息msg+Publisher+Subscriber 示例运行
  6. 吴恩达《机器学习》学习笔记十一——应用机器学习的建议
  7. 安卓模拟器 Genymotion 安装
  8. C++学习之路 | PTA乙级—— 1016 部分A+B (15分)(精简)
  9. win10用Eclipse+OpenJTag对S3C2440开发板进行动态调试
  10. 消息队列(4):Kafka