【linux】解決unzip在linux下解壓中文名zip文件出現亂碼的問題


問題描述

linux(我用的系統是centos)下zip原生命令解壓帶中文名的壓縮包時,解壓出來的文件為亂碼:

通過在網上查詢得知,zip格式中並沒有指定編碼格式,Windows下生成的zip文件中的編碼是GBK/GB2312等,導致這些zip文件在Linux下解壓時出現亂碼問題,因為Linux下的默認編碼是UTF8。
網上說,zip 有個參數-O可指定文件編碼,但是我在系統上卻沒有找到相應的參數:

原來unzip官方並不支持該參數,需要通過給unzip源碼打補丁包的方法,來解決中文編碼問題。

解決方法

unzip源碼編譯

首先下載unzip源碼:
https://svwh.dl.sourceforge.net/project/infozip/UnZip 6.x (latest)/UnZip 6.0/unzip60.tar.gz
由於unzip編譯需要bzip源碼,下載源碼:
https://iweb.dl.sourceforge.net/project/bzip2/bzip2-1.0.6.tar.gz
下載完成后,解壓文件:

tar zxvf unzip60.tar.gz   
tar zxvf bzip2-1.0.6.tar.gz

將bzip2下所有文件拷貝到unzip60/bzip2下

make -f unix/Makefile  flags
make -f unix/Makefile  generic

即可生成unzip可執行文件,但此時是未經過修改的unzip。
我們還需要打補丁包。

打補丁包

下載補丁包:
https://bugs.archlinux.org/task/18691?getfile=5410
將補丁包unzip-6.0-iconv.patch 放進unzip60目錄下

patch -p1 < unzip-6.0-iconv.patch

即可完成打補丁操作。

由於補丁中調用了iconv庫,需要安裝iconv動態庫。
下載libiconv源碼,然后編譯安裝:

wget http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.15.tar.gz
tar -zxvf libiconv-1.15.tar.gz
cd libiconv-1.15
./configure
make
make install

修改unzip的Makefile:
修改unix/Makefile
283行添加 -liconv
286行添加 -liconv

然后執行編譯:

make -f unix/Makefile  flags
make -f unix/Makefile  generic

重新編譯即可
即可到unzip

部署

目標機器下/usr/lib64/下需要有動態庫libiconv.so,將動態庫libiconv.so.2.6.0放置到/usr/lib64/,然后創建軟鏈接

cd /usr/lib64/
ln -s libiconv.so.2.6.0 libiconv.so.2

將unzip拷貝到目錄機器/usr/bin/下,替換原有的unzip程序。
然后執行unzip就可以看到-O參數了:

解壓中文件名的壓縮包,也沒有問題了:

參考

Linux下使用unzip解壓縮中文亂碼問題
Linux 下 zip 文件解壓亂碼如何解決?


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM