Mac下使用unzip命令解码会发现解出来的中文文件名都是乱码,这里有一种python的解压方式,我把他写成函数形式,可以开箱即用。
import os
import zipfile
import shutil
import chardet
def unzip(zipFilePath, targetDir):
"""解压zip
Args:
zipFilePath: zip文件
targetDir: 目标文件夹
"""
with zipfile.ZipFile(zipFilePath, 'r') as zf:
for filename in zf.namelist():
encodeInfo = chardet.detect(filename.encode('cp437'))
print(encodeInfo)
target_filename = targetDir+filename.encode('cp437').decode(encodeInfo['encoding']) # 将文件名正确编码
dirname = os.path.dirname(target_filename)
if not os.path.exists(dirname) and dirname != "":
os.makedirs(dirname)
if target_filename!="" and target_filename[-1]=="/": # 文件夹
continue
print("Extracting:",target_filename)
with open(target_filename, 'wb') as output_file: # 创建并打开新文件
with zf.open(filename, 'r') as origin_file: # 打开原文件
shutil.copyfileobj(origin_file, output_file) # 将原文件内容复制到新文件
以上代码经过python3.5测试。
根本问题是在windows下中文都是用gbk编码的,Linux或Unix下默认是UTF-8,所以这里要做一层解码。
