Gangmax Blog

Linux解压缩zip文件中文乱码问题的Python解决方案

在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
#!/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(named “unzipgbk.py”)文件和zip文件((named “abc.zip”))放入同一个目录,然后运行以下命令即可:

1
python unzipgbk.py abc.zip

Comments