Unicode 使用 Python 解压缩文件时出错 .extractall.



我有 I 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 错误。

如何更正我的文件名?

您应该在传递给 extractall 方法之前解码文件。

with closing(z), zipfile.ZipFile(io.BytesIO(z.content)) as myzip:
            local_path = local_path.decode('utf-8')
            myzip.extractall(local_path)

阅读模块中的文档,他们对此很明确:

ZIP 文件没有正式的文件名编码。如果您有 unicode 文件名,则必须将它们转换为所需编码的字节字符串,然后再将它们传递给 '((。WinZip 将所有文件名解释为 CP437(也称为 DOS 拉丁语(编码。

最新更新