使用python的protobuf解码错误

使用python的protobuf解码错误,python,protocol-buffers,Python,Protocol Buffers,当我尝试使用python将steam解码为protobuf时,出现以下错误: UnicodeDecodeError:“utf8”编解码器无法解码位置1中的字节0xaa 我的代码只是从文件中读取数据,然后使用“ParseFromString”对其进行解码 f = open('ds.resp', 'rb') eof = False data = f.read(1024*1024) eof = not data if not eof: entity = data

当我尝试使用python将steam解码为protobuf时,出现以下错误:

UnicodeDecodeError:“utf8”编解码器无法解码位置1中的字节0xaa

我的代码只是从文件中读取数据,然后使用“ParseFromString”对其进行解码

f = open('ds.resp', 'rb')
eof = False
    data = f.read(1024*1024)
    eof = not data
    if not eof:
        entity = dataRes_pb2.dataRes()
        entity.ParseFromString(data)
        print entity
文件中的数据是通过http请求下载和保存的。数据似乎不是utf-8编码的。所以我使用chardet.detect()并发现它是一个ISO-8859-2

问题是,似乎ParseFromString()需要对数据进行utf-8编码(我不确定)。如果我将数据从ISO-8859-2转换为utf-8。然后我又犯了一个错误:

google.protobuf.message.DecodeError:消息被截断


如何正确解码数据?有人有什么建议吗?

你能发布完整的回溯吗?http请求中的数据是如何保存的,http头上说编码是什么?保存http的东西是否将其保存在utf-8中?“截断消息”消息有多大?如果超过
1024*1024
则确实被截断。Protobuf数据不是UTF-8编码的。它是原始二进制字节,而不是文本,因此它根本没有字符集。也就是说,您粘贴的代码没有显示您试图解码utf-8,因此我不确定错误是如何产生的。请发布完整的错误回溯,并发布
.proto
文件中定义的protobuf类型。但是,当执行
pb\u msg.SerializeToString
时,字符串字段是UTF-8编码的