在Linux上解压缩一个从Windows平台压缩的包含有中文文件名的zip文件时,解压缩出来的文件名会是乱码。该问题的根本原因是Windows中文版上压缩一个zip文件时,Windows会使用GBK为文件名编码,这是不合理的。正常的方式应该是象Linux平台一样,默认使用UTF-8编码。
从这里看到一段专门用来解决这个问题的python代码,很好:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
|
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(named “unzipgbk.py”)文件和zip文件((named “abc.zip”))放入同一个目录,然后运行以下命令即可:
1
| python unzipgbk.py abc.zip
|