首页 > 解决方案 > 获取 gzip.BadGzipFile:解压缩收到的消息时不是 gzip 压缩文件(b“b”)

问题描述

我有一个名为的 html 文件75842.html,我通过执行以下操作使用 gzip 压缩该文件:

with open('75842.html', 'rb') as f:
    body_compressed=gzip.compress(f.read())

body_compressed是一个<class 'bytes'>对象。

我无法通过 SQS 发送字节,消息正文需要是一个字符串。所以我MessageBody=str(body_compressed)在发送文件时定义。

在另一台服务器上阅读消息时,我想使用以下命令解压缩并保存它:

with open('75842_decompressed.html', 'w') as f:
    f.write(gzip.decompress(str.encode(body)))

然后我收到错误消息gzip.BadGzipFile: Not a gzipped file (b"b'")。可能是因为文件以 b' 开头。但是,我不确定如何解决它。任何帮助深表感谢。

标签: pythonamazon-web-servicescompressiongzipamazon-sqs

解决方案


使用str()是一个糟糕的主意。您最终会使数据大小增加三倍,从而消除了压缩的好处!你看过前后的长度str()吗?

您可以发送的数据有什么限制?如果只能发送可打印的字符,则可以使用Base-64 或 Base-85 编码,它们仅将数据扩展几十个百分点,而不是那里的一个因素。


推荐阅读