Protocol buffers 谷歌协议缓冲区错误:";序列化协议缓冲区时遇到包含无效UTF-8数据的字符串;

Protocol buffers 谷歌协议缓冲区错误:";序列化协议缓冲区时遇到包含无效UTF-8数据的字符串;,protocol-buffers,Protocol Buffers,我正在使用以下代码 int lenSend = odl->ByteSize(); char* buf = (char *)malloc(lenSend); odl->SerializeToArray(buf, lenSend); 我得到这个错误,我不明白为什么我得到它(是的,我得到它三次): libprotobuf错误google/protobuf/wire_format.cc:1059]在序列化协议缓冲区时遇到包含无效UTF-8数据的字符串。字符串必须只包含UTF-8;将“字节”

我正在使用以下代码

int lenSend = odl->ByteSize();
char* buf = (char *)malloc(lenSend);
odl->SerializeToArray(buf, lenSend);
我得到这个错误,我不明白为什么我得到它(是的,我得到它三次):

libprotobuf错误google/protobuf/wire_format.cc:1059]在序列化协议缓冲区时遇到包含无效UTF-8数据的字符串。字符串必须只包含UTF-8;将“字节”类型用于原始字节。
libprotobuf错误google/protobuf/wire_format.cc:1059]在序列化协议缓冲区时遇到包含无效UTF-8数据的字符串。字符串必须只包含UTF-8;将“字节”类型用于原始字节。
libprotobuf错误google/protobuf/wire_format.cc:1059]在序列化协议缓冲区时遇到包含无效UTF-8数据的字符串。字符串必须只包含UTF-8;将“字节”类型用于原始字节


谢谢。

您可以按照邮件中的建议来消除警告


odl
(在.proto文件中)的定义中必须有一个或多个字段,这些字段定义为
string
,但要将非UTF-8字符放入其中。如果将这些更改为
字节,警告应消失。

字符串字符串必须始终包含UTF-8编码或7位ASCII文本。字符串str/unicode[4]

字节可以包含任意字节序列。string ByteString str


有时,您应该使用字节而不是字符串

使用字节[]替换字符串,该字符串的编码不是UTF-8或ASCII。

转换[]字节进行翻译

例如:

message Data {
    Object obj = 1;
}
如果


我应该注意到,数据到达另一端(使用GPB作为套接字上的有效负载),看起来很好,但另一端使用相同的反序列化消息进行投诉。我可以不显示这条消息吗?你能把你的答案格式化得更好吗
# marshal object
message Data {
    bytes encodeObject = 1;
}
# unmarshal object