技术&教程 < 首页
30 Sep

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

By: Soil 0 COMMENTS

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

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

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

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

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

#zip -r abc.zip abc

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

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

#vim gbkzip

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

#!/usr/bin/env python
#-*- coding:utf8 -*-
'''
gbkzip - unzip Windows zip file and convert gbk to utf8

author:    YUCOAT(yucoat^yucoat.com)
date:      2012-9-28
homepage:  www.yucoat.com
If you find any bug please contact me, thank you!
'''
import os
import sys
import zipfile

if __name__ == '__main__':
    if len(sys.argv) != 2:
        print 'Usage: gbkzip < zipfile.zip >'
        exit(1)

    try:
        zip_obj = zipfile.ZipFile(sys.argv[1], 'r')
    except IOError as e:
        print e.strerror
        exit(1)

    for name in zip_obj.namelist():
        name_utf8 = name.decode('gb2312')
        path = os.path.dirname(name_utf8)

        if (not os.path.exists(path)) and path:
            os.makedirs(path)
        #Start Exacting
        filedata = zip_obj.read(name)
        if not os.path.exists(name_utf8):
            tmp = open(name_utf8, 'w')
            tmp.write(filedata)
            tmp.close()
        print 'Exacting %s ... done!'% (name_utf8)
    zip_obj.close()

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

#chmod +x gbkzip

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

#./gbkzip abc.zip

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

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

添加新评论