技术&教程 < 首页
30 Sep

关于linux和windows下压缩包内中文乱码的解决方案

By: Soil 0 COMMENTS

一定有人跟我遇到相同的问题:

首先我们的网站服务器是Linux的,自己常用的电脑又是Windows的,备份服务器数据是习惯性使用tar压缩,结果备份文档传到windows下解压后,中文名文件和文件夹全部报废,都是乱码。

又或者windows下不小心网站内很多文件中文名的,压缩成zip包上传linux服务器后unzip解压后,又是该死的乱码。。。头痛啊!

简单而粗暴的解决方案这就告诉大家:

对于第一种状况,由Linux下压缩后将压缩包拷贝到windows的,请不要使用tar命令压缩,而是直接使用zip命令

1#zip -r abc.zip abc

压缩当前目录下abc文件夹到当前目录下abc.zip文件,而后将abc.zip文件在windows下解压就不会乱码了。至于zip和unzip的安装和使用自己百度吧!

对于第二种状况,由windows下压缩的zip包在linux下unzip的乱码问题,请先将zip包,比如abc.zip上传到目录下,然后在目录下用vim新建一个文件如gbkzip

1#vim gbkzip

之后将如下代码黏贴感谢yucoat

01#!/usr/bin/env python
02#-*- coding:utf8 -*-
03'''
04gbkzip - unzip Windows zip file and convert gbk to utf8
05 
06author:    YUCOAT(yucoat^yucoat.com)
07date:      2012-9-28
08homepage:  www.yucoat.com
09If you find any bug please contact me, thank you!
10'''
11import os
12import sys
13import zipfile
14 
15if __name__ == '__main__':
16    if len(sys.argv) != 2:
17        print 'Usage: gbkzip < zipfile.zip >'
18        exit(1)
19 
20    try:
21        zip_obj = zipfile.ZipFile(sys.argv[1], 'r')
22    except IOError as e:
23        print e.strerror
24        exit(1)
25 
26    for name in zip_obj.namelist():
27        name_utf8 = name.decode('gb2312')
28        path = os.path.dirname(name_utf8)
29 
30        if (not os.path.exists(path)) and path:
31            os.makedirs(path)
32        #Start Exacting
33        filedata = zip_obj.read(name)
34        if not os.path.exists(name_utf8):
35            tmp = open(name_utf8, 'w')
36            tmp.write(filedata)
37            tmp.close()
38        print 'Exacting %s ... done!'% (name_utf8)
39    zip_obj.close()

然后wq保存,之后请赋予gbkzip文件执行权限

1#chmod +x gbkzip

最后,使用gbkzip来解压缩abc.zip文件

1#./gbkzip abc.zip

解压出来的文件终于正常了哦!

本文地址:http://cms.xisix.com:8880/post-118.html

添加新评论