• 【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 文件解压乱码如何解决?

  • 相关阅读:
    h5 穿透滚动
    Safari 导航栏
    浮层滚动问题
    兼容性常规检测
    CORS
    Webpack 一些概念
    01 离散时间信号的时域表示
    03 信道容量
    01 MATLAB基本概念
    02 字斟句酌
  • 原文地址:https://www.cnblogs.com/JesseTsou/p/10488435.html
Copyright © 2020-2023  润新知