写在前面:
之前的一些工作遇到的问题都是以笔记的形式记录,现在开了博客后,打算把之前觉得有用的笔记放到博客上,帮助别人的同时,自己没事还能温故知新一下,一举两得。
问题现象:
如文章标题所说,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