Zlib 解压缩脚本在 linux 上工作但不在 windows 上工作:解压缩数据时出现错误 -5:流不完整或被截断

Zlib decompress script working on linux but not on windows: error -5 while decompressing data: incomplete or truncated stream

我在 python 2.7 上编写了一个脚本,用于使用 zlib 解压缩文件。 我已经在 Linux 上使用它并且它正在工作,但是当我尝试在 windows 上使用它时 运行 我收到以下错误:

Error -5 while decompressing data: incomplete or truncated stream.

我正在使用此代码:

datosComprimidos = open(archivo).read() datosDescomprimidos = zlib.decompress(datosComprimidos)

此外,我已经尝试了其他代码:

datosDescomprimidos = zlib.decompressobj().decompress(datosComprimidos, zlib.MAX_WBITS)

但在这种情况下,它不会在 datosDescomprimidos 上写入任何内容。

有人知道吗? 谢谢

是的,因为

datosComprimidos = open(archivo).read()

returns数据以text方式打开。您需要以二进制模式阅读它:

datosComprimidos = open(archivo,"rb").read()

它在 Linux 上无关紧要,但它在 Windows 上很重要,因为否则,所有 10 值都以 13 值作为前缀并且它会损坏数据(在 LF 之前添加 CR 以 windows 文本兼容不适用于二进制流!)

作为奖励,您的代码现在 python 3 兼容。

请注意,在 with 块中使用它会更 pythonic:

with open(archivo,"rb") as f:
   datosComprimidos = f.read()

所以我们控制文件何时关闭(退出块时)