解决Linux系统使用unzip解压后中文名乱码问题

写在前面:

之前的一些工作遇到的问题都是以笔记的形式记录,现在开了博客后,打算把之前觉得有用的笔记放到博客上,帮助别人的同时,自己没事还能温故知新一下,一举两得。

问题现象:

如文章标题所说,Linux系统使用unzip解压zip软件包后,中文名乱码

问题原因:

此问题是由于zip格式的缺陷,zip文件格式中没有字段标志出文件名的编码格式,Windows下生成的zip文件中的编码是GBK/GB2312等,由于zip文件中没有声明其编码,所以 linux上的unzip一般以默认编码UTF8解压,因此,导致这些zip文件在Linux下解压时出现中文文件名乱码。
注:目前发现5.52版本unzip有这问题,6.00以上版本会自动转换编码

解决办法一,利用pyton来处理

# vi uzip
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# uzip.py
import os
import sys
import zipfile
print "Processing File " + sys.argv[1]
file=zipfile.ZipFile(sys.argv[1],"r");
for name in file.namelist():
    utf8name=name.decode('gbk')
    print "Extracting " + utf8name
    pathname = os.path.dirname(utf8name)
    if not os.path.exists(pathname) and pathname!= "":
        os.makedirs(pathname)
    data = file.read(name)
    if not os.path.exists(utf8name):
        fo = open(utf8name, "w")
        fo.write(data)
        fo.close
file.close()
# chmod +x uzip
# ./uzip xxxx.zip

 

方法2,通过unzip行命令解压,指定字符集,但一些unzip是没有-O这个选项的

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

方法3,在环境变量中,指定unzip参数,总是以指定的字符集显示和解压文件

# vim /etc/environment中加入2行
UNZIP=”-O CP936″
ZIPINFO=”-O CP936″
我是用方法一解决的,其他两种方法思路相同,测试后没有效果,但是网上有人说可以,估计跟系统或者软件版本有关,此处仅作为记录。
© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享