使用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