2015-11-20 2 views
2

У меня есть буферы протокола Google 80%, работающие на Python3. Мой файл .proto работает, я кодирую данные, жизнь почти хороша. Проблема в том, что я не могу ParseFromString получить результат SerializeToString. Когда я печатаю SerializeToString, он выглядит так, как я ожидал, довольно компактное двоичное представление (которому предшествует b).Буферы протокола Google (protobuf) в Python3 - проблема с ParseFromString (кодирование?)

Я предполагаю, что, возможно, это разница в том, как обрабатывать строки Python2 и Python3. Путь SerializeToString - это Bytes, а не строка.

Печатный вывод SerializeToString (типа Python есть):

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]' 

результат ParseFromString (сообщение):

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

Смежные вопросы