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

  • 相关阅读:
    SpringMvc的执行机制和环境搭建
    Flexbox,更优雅的布局
    Laravel框架 mysql 数据库 —— 基本使用
    在 Windows 上安装 Laravel 5.x
    javascript 中的借鸡生蛋
    由斐波那契数列所引发的性能优化
    成为一名优秀的Web前端开发者
    H5之contenteditable
    ionic 集锦
    vm10虚拟机安装Mac OS X10.10教程[转]
  • 原文地址:https://www.cnblogs.com/aaronhua/p/14018119.html
Copyright © 2011-2022 走看看