unzip解壓中文難亂碼問題,親測有效

2021-10-21 19:53:04 字數 1198 閱讀 4885

在zip標準中,對檔名的 encoding 用的不是 unicode,而可能是各種軟體根據系統的預設字符集來採用(此為猜測),因此zipfile中根據檔案 flag 檢測的時候,只支援 cp437 和 utf-8。

具體就是查詢 zipfile.py 源**找到下面的**:

1

:if flags &

0x800:2

:# utf-8 file names extension

3: filename = filename.decode(

'utf-8')4

:else:5

:# historical zip filename encoding

6: filename = filename.decode(

'cp437'

)

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

具體**如下:

#修改**

if flags &

0x800

:#utf-8 file names extension

filename = filename.decode(

'utf-8'

)else

:#historical zip filename encoding

filename = filename.decode(

'cp437'

)#修改

filename = filename.encode(

"cp437"

).decode(

'gbk'

)後面一處同樣如此修改

if zinfo.flag_bits &

0x800

:#utf-8 filename

fname_str = fname.decode(

"utf-8"

)else

: fname_str = fname.decode(

"cp437"

)#修改

fname_str = fname_str.encode(

"cp437"

).decode(

'gbk'

)

unzip解壓中文亂碼 氷泠的部落格

1 問題描述 直接unzip zip亂碼,肯定是編碼問題了不用問。但是unzip沒有指定編碼的選項 網上的解決方案如下 unzip o gbk gb18030cp936 xx.zip但是沒有 o選項啊。2 解決辦法 解決辦法是安裝unzip iconv,筆者系統為manjaro,直接安裝會提示會與u...

Ubuntu 使用unzip解壓亂碼的問題

由於win使用的是gbk編碼,在win下打包zip的壓縮檔案在ubuntu下使用unzip解壓會出現亂碼的問題。解決方案 換軟體,不用unzip,使用unar 18.04是預設安裝的,如果沒有預設安裝可以使用 sudo apt get install unar 這個命令安裝。1.列出壓縮包的內容 l...

Linux下使用unzip解壓縮中文亂碼問題

我的linux 裝了 unzip。沒有裝就執行 yum install unzip 即可 原因是unzip試圖將zip檔案中用 oem ibm dos codepage 編碼的檔名轉換成自己的內部編碼。可惜unzip只能轉換極少數幾種codepage,中文的 cp936 不在其列。方法一 unzip...