2013-02-28 135 views
2

我使用下面的代码谷歌协议缓冲区错误

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

我得到这个错误,我不明白为什么我得到它(是的,我得到它的三倍):

libprotobuf ERROR谷歌/protobuf/wire_format.cc:1059]在序列化协议缓冲区时遇到包含无效的UTF-8数据的字符串。字符串只能包含UTF-8;对原始字节使用“字节”类型。 libprotobuf ERROR google/protobuf/wire_format.cc:1059]在序列化协议缓冲区时遇到包含无效的UTF-8数据的字符串。字符串只能包含UTF-8;对原始字节使用“字节”类型。 libprotobuf ERROR google/protobuf/wire_format.cc:1059]在序列化协议缓冲区时遇到包含无效的UTF-8数据的字符串。字符串只能包含UTF-8;对原始字节使用“字节”类型。

谢谢。

+0

我应该注意到数据到达另一端(使用GPB在套接字上使用有效载荷)并且看起来很好,但是另一端在解序列化时报告了相同的消息。我可以压制这个信息吗? – user1676605 2013-02-28 16:24:38

回答

4

您可以按照邮件中的建议摆脱警告!

您必须在odl(在.proto文件中)的定义中有一个或多个字段,它们被定义为string,但您将非UTF-8字符放入其中。 The docs state that you shouldn't do this。如果您将这些更改为bytes,则警告消失。

0

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

字节可能包含任意字节序列。字符串ByteString str

somtimes你应该用户字节而不是字符串!

0

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