雲伺服器:解決linux下zip檔案解壓亂碼問題

宵雲科技發表於2019-11-19

雲伺服器:解決linux下zip檔案解壓亂碼問題

 

原因

由於zip格式並沒有指定編碼格式,Windows下生成的zip檔案中的編碼是GBK/GB2312等,因此,導致這些zip檔案在Linux下解壓時出現亂碼問題,因為Linux下的預設編碼是UTF8。

 

解決方案一

 

使用7z解壓。

 

安裝p7zip和convmv

# fedora $ su -c 'yum install p7zip convmv' # ubuntu $ sudo apt-get install p7zip convmv

執行一下命令解壓縮

# 使用7z解壓縮 $ 7za x your-zip-file.zip # 遞迴轉碼 $ convmv -f GBK -t utf8 --notest -r .

解決方案二

在windows上壓縮的檔案,是以系統預設編碼中文來壓縮檔案。由於zip檔案中沒有宣告其編碼,所以linux上的unzip一般以預設編碼解壓,中文檔名會出現亂碼。

雖然2005年就有人把這報告為bug, 但是info-zip的官方網站沒有把自動識別編碼列入計劃,可能他們不認為這是個問題。Sun對java中存在N年的zip編碼問題,採用了同樣的處理方式。

 

有2種方式解決問題:

 

1. 透過unzip行命令解壓,指定字符集

unzip -O CP936 xxx.zip (用GBK, GB18030也可以)

有趣的是unzip的manual中並無這個選項的說明, unzip --help對這個引數有一行簡單的說明。

 

2. 在環境變數中,指定unzip引數,總是以指定的字符集顯示和解壓檔案

/etc/environment中加入2行

UNZIP="-O CP936" ZIPINFO="-O CP936"

這樣Gnome桌面的歸檔檔案管理器(file-roller)可以正常使用unzip解壓中文,但是file-roller本身並不能設定編碼傳遞給unzip。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69948194/viewspace-2664743/,如需轉載,請註明出處,否則將追究法律責任。

相關文章