【发布时间】:2021-06-23 09:55:34
【问题描述】:
在谷歌两天后感到绝望。 我正在使用来自 rabbitmq 的 pika 消息。 我知道它是 base64 并且 content_encoding 是 gzip。 我开始将字节正文编码为 utf-8。 现在我仍然需要以某种方式解压缩它。到目前为止的代码如下:
1 def callback(channel, method, properties, body):
2 if properties.content_encoding == 'gzip':
3
4 decoded_body = base64.b64encode(bytes(str(body), 'utf-8'))
5 #eliminating the leading 'b
6 decoded_body = decoded_body.decode()
7
8 #this snippet is just copied from another solution
9 buf = io.StringIO(decoded_body)
10 f = gzip.GzipFile(fileobj=buf)
11 decompressed_body = f.read()
12 print(decompressed_body)
以下错误信息出现在第 11 行。
return self._buffer[read:] + \
TypeError: can't concat str to bytes
显然 gzip 文件中有一个“\”,我需要将其转换为 b“\”。 但我不知道怎么做。 我是在正确的轨道上还是更容易解决?
非常感谢您的帮助!
这是在 rabbitmq 中打开消息时的有效负载: AFN3oPUfiwgAAAAAAAQAhU89T8MwEP0ryGJrHJ3t2mo8AqqK+BhIqGC8JKc0UuKUxBmqqv+di4pYGFhOenfv495ZvNA0YUOv2JPw4n77ke4Ix1gSRpGIPY1T OwS+qFQzLtqe8oj9kTcatJJgpDaFWnvrPOg0g40Ca1agPADz30P7NdPjA9OzUpFzTktnMyfXWNYSyVmZmUpXCg2ylhX5MI/V8srTcPgc5tCkGzAgTZrnMn+W AFYttALHhqLwYe66RLwRp0xxybkuflrdDfVJ+LO4jafjn3rJDUO24rnDUHf/h/5Kt+MSGCo2FwD+2vZy+QYahuynTgEAAA==
这是我在没有任何编码的情况下打印正文时得到的: b"\x00Sw\xa0\xf5\x1f\x8b\x08\x00\x00\x00\x00\x00\x04\x00\x85O=O\xc30\x10\xfd+\xc8bk\x1c\x9d\xed\xdaj\xbc$\xa74R\xe2\x94\xc4\x19\xaa\xaa\xff\x9d\x8b\x8aX\x18XNzw\xef\xe3\xdeY\xbc\xd04aC\xaf\xd8\x93\xf0\xe2~\xfb\x91\xee\x08\xc7X\x12F\x91\x88=\x8dS;\x04\xbe\xa8T3.\xda\x9e\xf2\x88\xfd\x917\x1a\xb4\x92\xa46\x85Z{\xeb
【问题讨论】:
-
能否请您告诉我您是如何解压缩数据的。
-
在回调函数中我跳过了不必要的字节
def callback(channel, method, properties, body): if properties.content_encoding == 'gzip': for count, bite in enumerate(body): if body[count] == 31 and body[count + 1] == 139: break try: decompressed_body = gzip.decompress(body[count:]) print("gzipped: {} \n".format(decompressed_body.decode())) except: print("unzipped: {} \n".format(body)) -
感谢您的回复。
标签: python-3.x http rabbitmq gzip pika