天天看點

Linux下使用unzip解壓縮中文亂碼問題 問題提出 如果您的系統還未編譯安裝Unzip 如果您的系統已經安裝了unzip

使用info-zip.org 的 unzip類 解壓zip壓縮包,如果壓縮包中有中文檔案名,那麼解壓這些檔案出來時檔案名是亂碼的。

分析:

調試發現問題出現在multibytetowidechar方法裡,

如 multibytetowidechar(cp_acp,0,fn,-1,tfn,max_path); 到這裡時fn中的name屬性值還是正常的,在這個方法内部執行完tfn就亂了。

解決方法:

打開unzip.cpp源檔案,找到函數

1

2

3

4

5

這個函數裡有

把 cp_utf8 改為cp_acp, ( cp_acp 訓示要使用目前設定的 api 預設 windows ansi 代碼頁)

重新編譯後

這樣就解決了解壓中文檔案名稱亂碼的問題

上面的情況,我們我觀察到unzip源代碼這段開始的地方有判斷

這樣問題似乎更簡單了,不用改源代碼,隻需在make時定義 ext_ascii_to_native 即可,這樣 ext_ascii_to_native 實際為一個空的宏,不進行任何轉換操作。

比如,使用下面的方法編譯

或者在bash執行下面兩行

unzip解壓縮含中文檔案名zip包是出現亂碼的問題解決!

通過unzip行指令解壓,指定字元集

在環境變量中,指定unzip參數,總是以指定的字元集顯示和解壓檔案

/etc/environment中加入2行

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

這樣以後我們解壓縮時隻需要運作此檔案即可

./myuzip.py xxxx.zip

轉載:http://blog.csdn.net/gatieme/article/details/44807105

繼續閱讀