Protobuf数据在swift中反序列化错误

时间:2015-06-17 11:33:20

标签: ios swift protocol-buffers

我试图从POST查询反序列化响应数据。但是我的proto deserializer返回错误:

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

以下是来自rest客户端的响应字符串:

"EJMDGhnQlNC+0YHRgtGD0L8g0LfQsNC60YDRi9GC"

以及我如何从此字符串创建数据:

let data = dataString.dataUsingEncoding(NSUTF8StringEncoding);

并解析它:

var _deData = MobileGetNewsResponse.parseFromData(jsonData!)

有任何解决此问题的建议吗?

1 个答案:

答案 0 :(得分:0)

"EJMDGhnQlNC+0YHRgtGD0L8g0LfQsNC60YDRi9GC"

这些数据本身并不是一个原型。它似乎可能是base64编码的protobuf。您需要先对其进行64位解码,然后将其传递给protobuf解析器。

请记住,protobufs是原始字节,而不是文本。您永远不应该尝试将原始protobuf存储在字符串中,也不应尝试将其解释为Unicode或UTF-8。它只是字节。 (base64是将字节转换为文本的一种方式。)

我也关注这一行:

var _deData = MobileGetNewsResponse.parseFromData(jsonData!)

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