溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

解決python中zipfile出現亂碼的問題

發布時間:2020-08-03 16:17:11 來源:億速云 閱讀:377 作者:清晨 欄目:編程語言

小編給大家分享一下解決python中zipfile出現亂碼的問題,相信大部分人都還不怎么了解,因此分享這篇文章給大家學習,希望大家閱讀完這篇文章后大所收獲,下面讓我們一起去學習方法吧!

在zipfile.ZipFile中獲得的filename有中日文則很大可能是亂碼,這是因為

在 zip 標準中,對文件名的 encoding 用的不是 unicode,而可能是各種軟件根據系統的默認字符集來采用(此為猜測),而zipfile 中根據文件 flag 檢測的時候,只支持 cp437 和 utf-8。

具體zipfile模塊中的源代碼如下:

if flags & 0x800:
    # UTF-8 file names extension
    filename = filename.decode('utf-8')
else:
    # Historical ZIP filename encoding
    filename = filename.decode('cp437')

可見編碼被正確識別為utf8時的情況外,都會被識別并decode為cp437編碼,但如果實際是gbk等其他編碼時就變為亂碼了。所以解決的方法在于被decode為cp437后,重新再手動轉為正確的編碼。

在實際過程中可以對已經先用zipfile進行解壓,然后對unzip文件夾中的亂碼文件直接進行重命名。具體實現過程如下:

import os
def an_garcode(dir_names):
    """anti garbled code"""
    os.chdir(dir_names)
    for temp_name in os.listdir('.'):
        try:
            #使用cp437對文件名進行解碼還原
            new_name = temp_name.encode('cp437')
            #win下一般使用的是gbk編碼
            new_name = new_name.decode("gbk")
            #對亂碼的文件名及文件夾名進行重命名
            os.rename(temp_name, new_name)
            #傳回重新編碼的文件名給原文件名
            temp_name = new_name
        except:
            #如果已被正確識別為utf8編碼時則不需再編碼
            pass
        if os.path.isdir(temp_name):
            #對子文件夾進行遞歸調用
            an_garcode(temp_name)
            #記得返回上級目錄
            os.chdir('..')
an_garcode(os.getcwd())

以上是解決python中zipfile出現亂碼的問題的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女