zoukankan      html  css  js  c++  java
  • python zipfile文件名乱码问题

    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大小。而且,文件名都可以还原。没有乱码的情况。

  • 相关阅读:
    sql左外连接、右外连接、group by、distinct(区别)、intersect(交叉)、通配符、having
    nvarchar,varchar 区别
    链家笔试链家——找寻最小消费获取最大平均分java
    利用SpringAOP 实现 日志输出
    AOP 学习笔记
    Spring AOP中pointcut expression表达式解析
    基于@Aspect的AOP配置
    URI 中特殊字符处理
    给电脑设置视力保护色
    Spring不支持依赖注入static静态变量
  • 原文地址:https://www.cnblogs.com/aaronhua/p/14018119.html
Copyright © 2011-2022 走看看