Google Python3 中的协议缓冲区 (protobuf) - ParseFromString 有问题(编码?)

Google Protocol Buffers (protobuf) in Python3 - trouble with ParseFromString (encoding?)

我的 Google 协议缓冲区 80% 在 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@'

ParseFromString(消息)的结果:

None

没有提供错误...

所以 - 我最好的猜测是我需要做的就是 .decode() 生成的字节对象,问题是我不知道编码是什么。我试过 UTF-8、-16、Latin-1 和其他几个,但都没有成功。我的 Google-Fu 很强,但我还没有找到任何关于这个的东西。

如有任何帮助,我们将不胜感激。

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

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