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











![密码保护:[桜井宁宁]COS和泉纱雾超可爱写真福利集-一一网](https://www.proyy.com/skycj/data/images/2020-12-13/4d3cf227a85d7e79f5d6b4efb6bde3e8.jpg)

![密码保护:[桜井宁宁] 爆乳奶牛少女cos写真-一一网](https://www.proyy.com/skycj/data/images/2020-12-13/d40483e126fcf567894e89c65eaca655.jpg)



