【发布时间】:2015-11-20 00:11:09
【问题描述】:
我有 80% 的 Google 协议缓冲区在 Python3 中工作。我的 .proto 文件有效,我正在编码数据,生活几乎是美好的。 问题是我无法解析 SerializeToString 的结果。 当我打印 SerializeToString 时,它看起来就像我所期望的那样,是一个相当紧凑的二进制表示(前面是 b')。
我的猜测是,这可能是 Python2 和 Python3 处理字符串的方式不同。 SerializeToString 的 putput 是字节,而不是字符串。
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(message) 的结果:
None
没有提供错误...
所以 - 我最好的猜测是我需要做的就是 .decode() 生成的字节对象,问题是我不知道编码是什么。我尝试了 UTF-8、-16、Latin-1 和其他一些但没有成功。我的 Google-Fu 很强大,但我在这方面没有发现任何东西。
任何帮助将不胜感激。
【问题讨论】:
-
显示调用 ParseFromString 的代码
标签: python-3.x character-encoding protocol-buffers