使用info-zip.org 的 unzip類 解壓zip壓縮包,如果壓縮包中有中文檔名,那麼解壓這些檔案出來時檔名是亂碼的。
除錯發現問題出現在multibytetowidechar方法裡,
如 multibytetowidechar(cp_acp,0,fn,-1,tfn,max_path); 到這裡時fn中的name屬性值還是正常的,在這個方法內部執行完tfn就亂了。
解決方法:
開啟unzip.cpp原始檔,找到函式 zresult tunzip::get(int index,zipentry *ze){} ,
這個函式裡有
#ifdef unicode
multibytetowidechar(cp_utf8,0,fn,-1,tfn,max_path);
#else
strcpy(tfn,fn);
#endif
把 cp_utf8 改為cp_acp, ( cp_acp 指示要使用當前設定的 api 預設 windows ansi **頁)
重新編譯後
這樣就解決了解壓中文檔名稱亂碼的問題。
解壓zip檔案中文檔名亂碼問題
主要原因是,在windows下壓縮檔案時,是以系統的預設編碼 gbk,gb18030 來壓縮,zip檔案並沒有宣告編碼的格式,因此,linux下解壓縮時,也會使用系統預設的格式 utf 8 解壓縮,編碼格式不同,自然會出現亂碼。解決辦法,linux下解壓zip檔案時宣告一下編碼即可。比如對於某個wi...
ubuntu中文檔名亂碼
不知怎麼回事,裝了ubuntu後,目錄中出現了大量的亂碼檔名,下面是我轉來的文章,其中使用convmv的方法我試過,很管用。本地化問題對我這種菜鳥來說就等於解決各種各樣的亂碼,而檔名亂碼是最惹人眼煩的。一 gbk亂碼 參考 亂碼的樣子類似 解決方法 1.使用convmv 把亂碼檔名檔案複製在乙個空目...
Linux 中文檔名亂碼解決 FTP檔名亂碼
linux下中文顯示亂碼是因為linux中使用的是utf 8編碼 windows使用的是gbk編碼 可以在linux中使用convmv工具來對檔名進行轉碼 當然如果檔名轉碼為utf 8後 在windwos資源管理器中使用ftp進行檢視時就會亂碼 可以把liunx中的檔案轉碼成gbk後在windows...