2015-11-20 23 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