Python3中的Google协议缓冲区(protobuf)-解析字符串(编码?)有问题

doinxwow  于 2023-02-10  发布在  Python
关注(0)|答案(1)|浏览(153)

我有80%的Google协议缓冲区在Python3中工作。我的. proto文件可以工作,我正在编码数据,生活几乎是美好的。问题是我不能解析SerializeToString的结果。当我打印SerializeToString时,它看起来像我所期望的,一个相当紧凑的二进制表示(前面有b ')。
我猜这可能是Python2和Python3处理字符串的方式不同,SerializeToString的putput是Bytes,而不是字符串。
SerializeToString的打印输出(Python类型为):

b'\x10\xd7\xeb\x8e\xcd\x04\x1a\x0cnamegoeshere2@\x08\x80\xf8\xde\xc3\x9f\xb0\x81\x89\x14\x11\x00\x00\x00\x00\x00\x80d\xc0\x19\x00\x00\x00\x00\x00\xc0m@!\x00\x00\x00\x00\x00\x80R\xc0)\x00\x00\x00\x00\x00x\xb7\xc01\x00\x00\x00\x00\x00\x8c\x95@9\x00\x00\x00\x00\x00\x16\xb2@'

从字符串解析的结果(消息):

None

未提供错误...
所以--我最好的猜测是我需要做的就是. decode()生成bytes对象,问题是我不知道编码是什么。我试过UTF-8,-16,Latin-1,和其他一些没有成功。我的Google-Fu很强大,但我没有找到任何关于这个的东西。
任何帮助都将不胜感激。

htrmnn0y

htrmnn0y1#

ParseFromString是一个方法--它不返回任何东西,而是用解析后的内容填充self

message = MyMessageType()
message.ParseFromString(data)
print(message.some_field)

相关问题