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」の出力をキャプチャしようとしましたが、これら 2 つのファイル名は次のとおりです。
Akval\xd0\x92ir_Normal_v2007.ttf
Akval\xd0\x92ir, La police - The Font - Fr - En.pdf
「unzip -l akvaleir.zip」の出力をキャプチャせずに、unzip コマンドのように正しいファイル名を取得するにはどうすればよいですか?