美文网首页Linux NotesV_LinuxLinux
Linux 下 zip 文件解压乱码解决方案

Linux 下 zip 文件解压乱码解决方案

作者: 西文Steven | 来源:发表于2016-03-08 10:02 被阅读1010次

    由于zip格式中并没有指定编码格式,Windows下生成的 zip 文件中的编码是 GBK/GB2312 等,因此,导致这些 zip 文件在 Linux 下解压时出现乱码问题,因为Linux下的默认编码是 UTF8。

    目前网上流传一种 unzip -O cp936 的方法,但一些 unzip 是没有 -O 这个选项的(我用的 Debian 就没有,Ubuntu 可以)。

    unzip -O cp936 xxxx.zip
    

    另外有两种解决方案可用:

    第一种: python方案(此方案目前来看非常完美),推荐

    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    
    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()
    

    Python 语言,在复制代码后务必要注意代码的对齐

    Windows 用户屏蔽两条 print 语句,Linux 用户不用屏蔽(加 # 部分)

    Notice:有人补充 fo = open(utf8name, "wb") 否则 jpg 啊什么统统不正确

    第二种: 7z 方案

    需要安装p7zip和convmv,在Fedora下的命令是

    su -c 'yum install p7zip convmv'
    

    在 Ubuntu 下的安装命令是

    sudo apt-get install p7zip convmv
    

    安装完之后,就可以用 7za 和 convmv 两个命令完成解压缩任务。

    LANG=C 7za x your-zip-file.zip
    convmv -f GBK -t utf8 --notest -r .
    

    第一条命令用于解压缩,而LANG=C表示以US-ASCII这样的编码输出文件名,如果没有这个语言设置,它同样会输出乱码,只不过是UTF8格式的乱码(convmv会忽略这样的乱码)。

    第二条命令是将GBK编码的文件名转化为UTF8编码,-r表示递归访问目录,即对当前目录中所有文件进行转换。


    作者:Latm Ake
    链接:http://www.zhihu.com/question/20523036/answer/35225920
    来源:知乎

    相关文章

      网友评论

      • 8277cc411653:用 unar 没有遇到到中文问题! 注意不是 unrar

      本文标题:Linux 下 zip 文件解压乱码解决方案

      本文链接:https://www.haomeiwen.com/subject/bflzkttx.html