如何解決該代碼,所以我總是在unicode解碼文件名(所以Chineeze,俄羅斯和其他語言支持)?
自動?你不能。基本ZIP文件中的文件名是字節串,沒有附加的編碼信息,因此除非您知道創建ZIP的計算機上的編碼,否則無法可靠地獲取可讀的文件名。
對現代ZIP文件的標誌有一個擴展名,告訴你文件名是UTF-8。不幸的是,你從Windows用戶那裏收到的文件通常沒有它,所以你會用像chardet這樣固有的不可靠方法進行猜測。
我已經看到了Python 2的一些示例,但由於字符串的本質在python3中發生了變化,我不知道如何對其進行重新編碼或對其應用chardet。
Python 2只會給你原始字節。在Python 3的新特性是:
不幸的是(再次,因爲unfortunatelies永遠不會結束,其中ZIP而言),ZipFile
默默的做這個解碼不告訴你它的所作所爲。所以,如果你想切換,只有做轉碼的步驟,當文件名是犯罪嫌疑人,你必須複製的邏輯嗅探UTF-8標誌是否被設置:
ZIP_FILENAME_UTF8_FLAG = 0x800
for info in ZipFile('zipfile.zip').filelist():
filename = info.filename
if info.flag_bits & ZIP_FILENAME_UTF8_FLAG == 0:
filename_bytes = filename.encode('437')
guessed_encoding = chardet.detect(filename_bytes)['encoding'] or 'cp1252'
filename = filename_bytes.decode(guessed_encoding, 'replace')
...
HT tp://stackoverflow.com/questions/1807063/extract-files-with-invalid-characters-in-filename-with-python可能會給你一些答案,特別是第二個答案。 – Kush131