当前位置: 首页 > 知识库问答 >
问题:

Google协议缓冲区错误:“序列化协议缓冲区时遇到包含无效UTF-8数据的字符串”

弘承运
2023-03-14

我正在使用以下代码

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

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

libProbuf ERROR google/Probuf/wire_format.cc:1059]在序列化协议缓冲区时遇到包含无效UTF-8数据的字符串。字符串必须仅包含UTF-8;对原始字节使用'bytes'类型。
libProbuf ERROR google/Probuf/wire_format.cc:1059]在序列化协议缓冲区时遇到包含无效UTF-8数据的字符串。字符串必须仅包含UTF-8;对原始字节使用'bytes'类型。
libProbuf ERROR google/Probuf/wire_format.cc:1059]在序列化协议缓冲区时遇到包含无效UTF-8数据的字符串。字符串必须仅包含UTF-8;对原始字节使用'bytes'类型。

谢谢

共有3个答案

曾高杰
2023-03-14

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

郑俊彦
2023-03-14

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

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

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

钱运浩
2023-03-14

你可以按照信息中的建议来消除警告!

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

 类似资料:
  • 问题内容: 我正在使用gSoap将旧式C 系统重构为SOA。我们遇到了一些性能问题(非常大的XML),因此我的领导要我看一下协议缓冲区。我做到了,它看起来非常酷(我们需要C 和Java支持)。但是协议缓冲区是仅用于序列化的解决方案,现在我需要将其发送到Java前端。从C ++和Java角度来看,我应该使用什么来通过HTTP(只是内部网络)发送那些序列化的内容? PS。另一个人试图加速我们的gSoa

  • 我正在使用Google Protocol Buffers向服务器发送消息。我对如何发送图像与如何接收图像感到困惑。有关详细信息,请参阅下面的代码,但我的问题是: 我需要base64_decode从未经过base64编码的返回字符串吗,因为它是使用char*和size发送的?也许Google Protocol Buffers处理了这个问题,但我在生成的类中找不到任何证据。 我可能在这里找到了答案,但

  • 我试图安装Caffe库,但我有一个编译问题,由于一个错误的原型版本安装在我的系统。 我在论坛上遵循了许多提议的方法,我认为在这篇帖子中讨论了最类似的问题。 在caffe.pb.h中控件是: 但是在我的系统标头(/usr/include/google/cript buf/stubs/Common. h)中: 命令protoc--version从终端返回libprotoc 3.2.0。 所以我安装了3

  • 我试着按照你的指示去做https://github.com/golang/protobuf和https://github.com/google/protobuf/releases安装协议缓冲区。在我将bin路径从下载文件夹添加到之后,我试图运行,但它显示 有没有办法判断我是否正确安装了protobuf? 谢谢

  • 我有kafka集群接收消息。消息是一个字节数组的zip文件。zip文件包含二进制的原型数据文件作为条目。我正在读取zip文件,并试图反序列化的原型条目,这就是我的代码是打异常。 在将二进制protobuf文件作为压缩字节数组发送到代理之前,我能够对其进行反序列化。 但是,当我压缩这些二进制protobuf文件,向kafka生成消息,使用它,然后尝试反序列化zip流中的条目时,我面临着一些问题。 我