我使用Python的zipfile模块来解压缩.zip文件(以http://img.dafont.com/dl/?f=akvaleir为例)。
f = zipfile.ZipFile('akvaleir.zip', 'r')
for fileinfo in f.infolist():
print fileinfo.filename
f.extract(fileinfo, '.')
它的输出:
Akval�ir_Normal_v2007.ttf
Akval�ir, La police - The Font - Fr - En.pdf
解压后,由于文件名中存在无效编码字符,两个文件均无法访问。问题在于zipfile模块没有指定输出文件名的选项。
然而,“unzip akvaleir.zip”可以很好地转义文件名:
root@host:~# unzip akvaleir.zip
Archive: akvaleir.zip
inflating: AkvalВir_Normal_v2007.ttf
inflating: AkvalВir, La police - The Font - Fr - En.pdf
我尝试在我的Python程序中捕获 "unzip -l akvaleir.zip" 的输出,这两个文件名是:
Akval\xd0\x92ir_Normal_v2007.ttf
Akval\xd0\x92ir, La police - The Font - Fr - En.pdf
如何在不捕获“unzip -l akvaleir.zip”的输出的情况下获得正确的文件名,就像unzip命令所做的那样?
filename = unicode(fileinfo.filename, "cp437")
在使用Python3时应该改为filename = fileinfo.filename.encode('cp437').encode('???')
- Alfred Huang