Java自学者论坛

 找回密码
 立即注册

手机号码,快捷登录

恭喜Java自学者论坛(https://www.javazxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,会员资料板块,购买链接:点击进入购买VIP会员

JAVA高级面试进阶训练营视频教程

Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程Go语言视频零基础入门到精通Java架构师3期(课件+源码)
Java开发全终端实战租房项目视频教程SpringBoot2.X入门到高级使用教程大数据培训第六期全套视频教程深度学习(CNN RNN GAN)算法原理Java亿级流量电商系统视频教程
互联网架构师视频教程年薪50万Spark2.0从入门到精通年薪50万!人工智能学习路线教程年薪50万大数据入门到精通学习路线年薪50万机器学习入门到精通教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程MySQL入门到精通教程
查看: 9562|回复: 0

【linux】解决unzip在linux下解压中文名zip文件出现乱码的问题

[复制链接]
  • TA的每日心情
    奋斗
    2024-11-24 15:47
  • 签到天数: 804 天

    [LV.10]以坛为家III

    2053

    主题

    2111

    帖子

    72万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    726782
    发表于 2021-4-24 13:02:33 | 显示全部楼层 |阅读模式

    问题描述

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

    哎...今天够累的,签到来了1...
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|小黑屋|Java自学者论坛 ( 声明:本站文章及资料整理自互联网,用于Java自学者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2025-2-4 21:54 , Processed in 0.063757 second(s), 29 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表