在linux下解压tar.gz出现无法创建符号链接的问题,【linux】解决unzip在linux下解压中文名zip文件出现乱码的问题...

问题描述

linux(我用的系统是centos)下zip原生命令解压带中文名的压缩包时,解压出来的文件为乱码:

5ce3916d8957d15aa15bf10af5ddaaf1.png

通过在网上查询得知,zip格式中并没有指定编码格式,Windows下生成的zip文件中的编码是GBK/GB2312等,导致这些zip文件在Linux下解压时出现乱码问题,因为Linux下的默认编码是UTF8。

网上说,zip 有个参数-O可指定文件编码,但是我在系统上却没有找到相应的参数:

8a346800314e654db07a22ef9c4802f6.png

原来unzip官方并不支持该参数,需要通过给unzip源码打补丁包的方法,来解决中文编码问题。

解决方法

unzip源码编译

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。

我们还需要打补丁包。

打补丁包

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参数了:

9e1724324d7c6efada34fc8be0e57b63.png

解压中文件名的压缩包,也没有问题了:

1647268cfe475616814044f52b9d6d43.png

参考

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值