我有80%的Google协议缓冲区在Python3中工作。我的.proto文件工作,我编码数据,生活几乎是好的。 问题是我不能将ParseFromString作为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@'
ParseFromString(消息)的结果:
None
没有提供错误......
所以 - 我最好的猜测是我需要做的就是.decode()生成的字节对象,问题是我不知道编码是什么。我尝试过UTF-8,-16,Latin-1和其他一些没有成功的人。我的Google-Fu很强大,但我没有找到任何相关内容。
任何帮助都将不胜感激。
答案 0 :(得分:9)
ParseFromString
是一种方法 - 它不会返回任何内容,而是使用已解析的内容填充self
。使用它像:
message = MyMessageType()
message.ParseFromString(data)
print message.some_field