У меня возникла проблема с совместимостью при сериализации сообщения protobuf между python и nodejs.У меня есть сообщение protobuf, как показано ниже:
message User {
reserved 2,3;
string user_id = 1;
int32 coin = 4;
int32 exp = 5;
int32 gem = 6;
int32 level = 7;
}
Я хотел бы сериализовать экземпляр сообщения, например:
"userId": "3562957934"
"coin": 350
"exp": 1
"gem": 30
"level": 1
, когда я делаю user_pb2.User.SerializeToString () \x0a\x0a\x33\x35\x36\x32\x39\x35\x37\x39\x33\x34\x20\xde\x02\x28\x01\x30\x1e\x38\x01
или в двоичном виде
1101 1110 0000 0010 0010 1000 0000 0001 0011 0000 0001 1110 0011 1000 0000 0001
, когда я пытаюсь десериализовать это сообщение в nodejs, я получаю
"userId": "3562957934"
"coin": 381
"exp": 1
"gem": 30
"level": 1
, которыйимеет неправильное значение "монеты"
, затем я пытаюсь создать экземпляр сообщения (со значением монеты = 350) и десериализовать его в nodejs.Я получаю другой двоичный файл: \x5c\x0a\x5c\x0a\x33\x35\x36\x32\x39\x35\x37\x39\x33\x34\x20\xc3\x9e\x02\x28\x01\x30\x1e\x38\x01
или в двоичном виде:
1100 0011 1001 1110 0000 0010 0010 1000 0000 0001 0011 0000 0001 1110 0011 1000 0000 0001
Я обнаружил, что помимо странных байтов головы \x0a\x0a
и \x5c\x0a\x5c\x0a
главное различие между сериализацией python и nodejs - это байт 1101 1110
(python) против 1100 0011 1001 1110
(nodejs) или в виде строки 3562957934 �(08
(python) против 3562957934 Þ(08
(nodejs)
мой протокол: /usr/local/bin/protoc -I=protos user.proto --python_out=pb
(python) /usr/local/bin/protoc --js_out=import_style=commonjs,binary:protos user.proto -I=protos
(nodejs)
Я полагаю, что при одинаковом сообщении сериализация python и nodejs должна быть одинаковой, не так ли?Я пытался найти в Google официальные документы protobuf, но до сих пор не нашел решения.Кто-нибудь сталкивался с такой же проблемой?