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

  • 相关阅读:
    [BZOJ]1040: [ZJOI2008]骑士
    [BZOJ]1177: [Apio2009]Oil
    【luogu3384】【模板】树链剖分
    【NOIP2012TG】solution
    【NOIP2014TG】solution
    【NOIP2016TG】solution
    【NOIP2015TG】solution
    【NOIP2016】【LCA】【树上差分】【史诗级难度】天天爱跑步
    【网络流】【BZOJ1221】【HNOI2001】软件开发
    【网络流】【BZOJ1061】【NOI2008】志愿者招募
  • 原文地址:https://www.cnblogs.com/aaronhua/p/14018119.html
Copyright © 2020-2023  润新知