我有我的zip文件,有一些文件要解压缩。我的函数运行良好,直到我的文件中有一些unicode,如下所示:
- myfile.wav
- myfile2.wav
- my§ile.wav
当我尝试用这个功能解压缩时
with closing(z), zipfile.ZipFile(io.BytesIO(z.content)) as myzip:
myzip.extractall(local_path)
我收到了一个unicode错误。
如何更正文件名?
答案 0 :(得分:0)
在传递给extractall方法之前,您应解码文件。
with closing(z), zipfile.ZipFile(io.BytesIO(z.content)) as myzip:
local_path = local_path.decode('utf-8')
myzip.extractall(local_path)
阅读模块中的documentation,他们是明确的:
ZIP文件没有正式的文件名编码。如果您有unicode文件名,则必须将它们转换为所需编码的字节字符串,然后再将它们传递给'()。 WinZip将所有文件名解释为CP437中编码的文件名,也称为DOS Latin。