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

Protobuf data deserializing error in swift

我正在尝试反序列化来自 POST 查询的响应数据。但是我的原型反序列化器 returns 错误:

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

这是来自其余客户端的响应字符串:

"EJMDGhnQlNC+0YHRgtGD0L8g0LfQsNC60YDRi9GC"

下面是我如何从这个字符串创建数据:

let data = dataString.dataUsingEncoding(NSUTF8StringEncoding);

并解析它:

var _deData = MobileGetNewsResponse.parseFromData(jsonData!)

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

"EJMDGhnQlNC+0YHRgtGD0L8g0LfQsNC60YDRi9GC"

此数据本身不是 protobuf。看起来它可能是一个 base64 编码的 protobuf。您需要先对其进行 base64 解码,然后将其传递给 protobuf 解析器。

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

我也很关心这条线:

var _deData = MobileGetNewsResponse.parseFromData(jsonData!)

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