linux - Zlib 解压缩脚本适用于 linux 但不适用于 windows : error -5 while decompressing data: incomplete or truncated stream

标签 linux windows python-2.7 zlib

我已经在 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()

返回以文本 模式打开的数据。您需要以二进制模式阅读它:

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

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

作为奖励,您的代码现在符合 Python 3 标准。

请注意,在 with block 中使用它会更符合 pythonic:

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

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

关于linux - Zlib 解压缩脚本适用于 linux 但不适用于 windows : error -5 while decompressing data: incomplete or truncated stream,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47908440/

相关文章:

android - linux和android之间的Iotivity通信

linux - Libreoffice转换为pdf不可预测的大小

php - UTF-8贯穿始终

c# - 如何在 C# 中使用 TaskScheduler 设置 “run only if logged in” 和 “run as”?

python - 从嵌套列表 Python 中删除项目

linux - 避免在变量内部使用 ls 的更好方法

windows - 如何在 Windows 中使用 xcopy 复制目录结构

windows - 设置环境变量

python - 转储 yaml 时如何保留键值缩进

python-2.7 - 在python中计算朱利安日期