我正在使用以下代码
int lenSend = odl->ByteSize();
char* buf = (char *)malloc(lenSend);
odl->SerializeToArray(buf, lenSend);
我收到此错误,我无法理解为什么会得到它(是的,我得到它三次):
libprotobuf ERROR google / protobuf / wire_format.cc:1059]在序列化协议缓冲区时遇到包含无效UTF-8数据的字符串。字符串必须只包含UTF-8;对原始字节使用'bytes'类型。
libprotobuf ERROR google / protobuf / wire_format.cc:1059]在序列化协议缓冲区时遇到包含无效UTF-8数据的字符串。字符串必须只包含UTF-8;对原始字节使用'bytes'类型。
libprotobuf ERROR google / protobuf / wire_format.cc:1059]在序列化协议缓冲区时遇到包含无效UTF-8数据的字符串。字符串必须只包含UTF-8;对原始字节使用'bytes'类型。
感谢。
答案 0 :(得分:7)
您可以按照消息中的建议消除警告!
您必须在odl
(在您的.proto文件中)的定义中有一个或多个字段,这些字段定义为string
,但您要将非UTF-8字符放入其中。 The docs state that you shouldn't do this。如果您将这些更改为bytes
,警告就会消失。
答案 1 :(得分:0)
string字符串必须始终包含UTF-8编码或7位ASCII文本。 string String str / unicode [4]
bytes可包含任意字节序列。 string ByteString str
有时您应该使用字节而不是字符串!
答案 2 :(得分:0)
使用byte []替换字符串,其编码不是UTF-8或ASCII。
答案 3 :(得分:0)
转换 []byte 进行翻译
示例:
message Data {
Object obj = 1;
}
如果<grpc: failed to unmarshal the received message string field contains invalid UTF-8>
:
# marshal object
message Data {
bytes encodeObject = 1;
}
# unmarshal object