Mac 解压 windows 下压缩的文件名编码不对,有办法修正吗?

unzip -O cp936 xxx.zip

-O是 debian 还是 ubuntu 自己改的,其它很多发行版用原生的打包是没有这个参数的

大概是因为 ls 出来的已经是你 LANG 的编码了(str),还有一个原因是你里面包含其它 utf8 编码的文件名。而 echo 出来则是原本的内容(byte),这里通过 pipe 过去就能识别出来。

不过一般来说你解出来这种码是可能已经被转过一层了。因为如果是错误的码解压出来应该是那种 $...\x..一类的(至少我是这样

我在ubuntu和centos都是可以使用的。其他的发行版我不太清楚。

mac我记不太清楚了,不过可以用brew安装新的unzip试试。

$ brew install unzip

实在不行,我当时抄了一个网上的 unzip_gbk.py (用于无网络环境,无法升级unzip,但是一般linux都带python2的情况下):

#!/usr/bin/env python2

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()