我正在尝试从POST query反序列化响应数据。但我的proto反序列化程序返回错误:

'InvalidProtocolBuffer', reason: 'Invalid Tag: last tag 76'

以下是来自rest客户端的响应字符串:
"EJMDGhnQlNC+0YHRgtGD0L8g0LfQsNC60YDRi9GC"

我是如何从这个字符串创建数据的:
let data = dataString.dataUsingEncoding(NSUTF8StringEncoding);

然后分析它:
var _deData = MobileGetNewsResponse.parseFromData(jsonData!)

有什么解决这个问题的建议吗?

最佳答案

"EJMDGhnQlNC+0YHRgtGD0L8g0LfQsNC60YDRi9GC"

这些数据本身并不是一个原型。它可能是一个base64编码的protobuf。您需要先对其进行base64解码,然后将其传递给protobuf解析器。
请记住,protobuf是原始字节,而不是文本。不要试图将原始protobuf存储在字符串中,也不要试图将其解释为Unicode或UTF-8。只是字节。(base64是将字节转换为文本的一种方式。)
我也很担心这句话:
var _deData = MobileGetNewsResponse.parseFromData(jsonData!)

JSON和Protobufs是两种完全不同的格式。您不应该试图将protobuf解析为JSON,反之亦然。

关于ios - 快速的Protobuf数据反序列化错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30890358/

10-13 09:30