python zipfile 乱码_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大小。而且,文件名都可以還原。沒有亂碼的情況。
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的python zipfile 乱码_python zipfile文件名乱码问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 镜像浏览器_害怕win10镜像有第三方软
- 下一篇: python分布式对象存储_推荐:一款分