2015-11-20 22 views
2

我有Google协议缓冲区80%在Python3中工作。我的.proto文件起作用,我编码数据,生活几乎是好的。 问题是我不能ParseFromString SerializeToString的结果。 当我打印SerializeToString它看起来像我期望的,一个相当紧凑的二进制表示(以b'开头)。在Python3中的Google协议缓冲区(protobuf) - 与ParseFromString(编码?)的问题

我的猜测是,这可能是Python2和Python3处理字符串的方式不同。 SerializeToString的putput是字节,而不是字符串。

印刷SerializeToString的输出(Python类型为):ParseFromString(消息)的

b'\x10\xd7\xeb\x8e\xcd\x04\x1a\[email protected]\x08\x80\xf8\xde\xc3\x9f\xb0\x81\x89\x14\x11\x00\x00\x00\x00\x00\x80d\xc0\x19\x00\x00\x00\x00\x00\[email protected]!\x00\x00\x00\x00\x00\x80R\xc0)\x00\x00\x00\x00\x00x\xb7\xc01\x00\x00\x00\x00\x00\x8c\[email protected]\x00\x00\x00\x00\x00\x16\[email protected]' 

结果:

None 

不提供错误...

所以 - 我最好的猜测是我需要做的就是.decode()生成的字节对象,问题是我不知道编码是什么。我已经尝试过UTF-8,-16,Latin-1和其他一些没有成功的东西。我的Google-Fu很强大,但我还没有发现任何内容。

任何帮助,将不胜感激。

+0

显示调用ParseFromString的代码 –

回答

6

ParseFromString是一种方法 - 它不返回任何东西,而是用解析的内容填充self。像这样使用它:

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

糟糕!谢谢。似乎现在显而易见...感谢一百万。 – EnemyBagJones