5

我正在使用以下代码

int lenSend = odl->ByteSize();
char* buf = (char *)malloc(lenSend);
odl->SerializeToArray(buf, lenSend);

我收到此错误,但我不明白为什么会收到它(是的,我收到了 3 次):

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;对原始字节使用“字节”类型。

谢谢。

4

5 回答 5

11

您可以按照消息中的建议摆脱警告!

odl您必须在(在您的 .proto 文件中)的定义中有一个或多个字段,这些字段被定义为string但您将在其中放入非 UTF-8 字符。 文档声明您不应该这样做。如果将这些更改为bytes,警告应该会消失。

于 2013-03-01T19:54:38.873 回答
0

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

bytes 可以包含任意的字节序列。字符串 ByteString str

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

于 2014-02-17T05:05:02.213 回答
0

在golang中,可以使用strings.ToValidUTF8来避免临时

于 2021-08-25T06:27:52.363 回答
0

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

于 2016-12-09T08:31:14.540 回答
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
于 2021-02-04T08:58:01.353 回答