Python解壓縮ZIP檔案出現亂碼問題的解決方案

2021-10-25 21:24:21 字數 909 閱讀 5090

python中的zipfile模組用來解壓縮zip檔案非常方便,但是如果zip檔案的子檔案的檔名裡含有中文的話,解壓出出來的檔案的檔名卻是亂碼!這到底是為什麼呢?

檢視zipfile的原始碼後,終於找到原因:

if zinfo.flag_bits & 0x800:

# utf-8 filename

fname_str = fname.decode("utf-8")

else:

fname_str = fname.decode("cp437")

原來編碼不能被正確識別為utf-8的時候,會被是被識別並decode為cp437編碼,如果原來是gbk編碼的話就會變成亂碼。

知道是什麼原因後,解決的辦法也很簡單,那就是將檔名先使用cp437編碼encode,然後再用gbk編碼decode即可,來試試吧!

import os

import zipfile

is_zip = zipfile.is_zipfile(filepath)

if is_zip:

zip_file_contents = zipfile.zipfile(filepath, 'r')

for file in zip_file_contents.namelist():

filename = file.encode('cp437').decode('gbk')#先使用cp437編碼,然後再使用gbk解碼

print(filename)

zip_file_contents.extract(file,release_file_dir)#解壓縮zip檔案

os.chdir(release_file_dir)#切換到目標目錄

os.rename(file,filename)#重新命名檔案

linux 解壓縮zip檔案

功能說明 解壓縮zip檔案 語 法 unzip cflptuvz agcjlmnoqsvx p 密碼 zip檔案 檔案 d 目錄 x 檔案 或 unzip z 補充說明 unzip為.zip壓縮檔案的解壓縮程式。參 數 c 將解壓縮的結果顯示到螢幕上,並對字元做適當的轉換。f 更新現有的檔案。l 顯...

MAC解壓縮zip檔案

直接雙擊解壓縮 開啟終端,通過如下命令進行解壓縮 unzip 檔名注 當使用unzip命令解壓縮可能會出現如下錯誤 unzip easyconnectvpn.zip archive easyconnectvpn.zip inflating easyconnectinstaller.exe error...

PHP 解壓縮zip檔案

1 使用php執行檔案解壓縮zip檔案,前提條件,一定要確定伺服器開啟了zip拓展 2 封裝的方法如下 例項 1 3 壓縮檔案 4 param array files 待壓縮檔案 array d test 1.txt d test 2.jpg 檔案位址為絕對路徑 5 param string fil...