【问题标题】:Issue with decoding base64 encoded app engine data in swift快速解码base64编码的应用引擎数据的问题
【发布时间】:2016-03-16 03:59:34
【问题描述】:

我正在开发 ios 应用程序,它从 Google 端点获取数据,数据在服务器上以 base 64 编码为自定义 java 对象,然后由端点方法返回。

在 iOS 端,我可以使用生成的客户端代码接收数据并打印数据。

我遇到了一个问题,我无法将数据解码回 GTL**** 端点自动生成的类。

解码后的数据显示为一些十六进制数字: 我的代码:

let respo2 = GTLDecodeBase64(responce) as? GTLEndpointStatusCollection

我还尝试使用 swift 类进行解码:

let respo = NSData(base64EncodedString: responce, options: NSDataBase64DecodingOptions(rawValue: 0))

输入是base64编码的:rO0ABXNyABNqYXZhLnV0aWwuQXJyYXlMaXN0eIHSHZnHYZ......

所需的输出应该是可读的数据, 但我得到的是:

<aced0005 73720013 6a617661 2e757469 6c2e4172 7261794c.....

我什至尝试过编码,用 NSUTF8 解码 base64 解码数据 但没用。

我做错了什么?是否可以将在 Java 中的服务器上编码的数据(带有自定义 Java 对象)解码回来? (我了解 Google 端点在两者之间进行序列化/反序列化)

提前致谢。

【问题讨论】:

  • 您介意包括当前输出和所需输出吗?显示输入可能也是一个好主意。
  • 谢谢,我已经用输入、所需输出和当前输出更新了帖子
  • 看起来您需要发布执行编码的代码,因为这是问题发生的地方。如果我猜的话,那将是您采用 POJO 的原始序列化形式并通过 Base64 编码的线路发送它,并尝试在不理解该格式的 Swift / ObjC 中对其进行反序列化。
  • 感谢大家的建议,我不是说我已经解决了问题,而是我们将服务器代码更改为直接发送数据,之前我们曾经将java obj转换为字节串然后再次编码成 Base64 字符串并通过 google 端点发送。非常欢迎任何进一步的解决方案或专家建议......再次感谢......

标签: swift google-app-engine google-cloud-endpoints


【解决方案1】:

您应该使用 JSON 进行序列化,而不是手动将对象转换为字节串并进行 base64 编码。如果您使用的是 Endpoints 库,这会自动为您完成,只需在您的方法中返回对象即可。有关示例,请参阅文档 here,有关更多详细信息,请参阅 Endpoints 文档的其余部分。要使用 API,您可以使用生成的 iOS 库,这些库也可以按照示例 here 为您执行此操作。除非您检查 HTTP 流量或使用 API Explorer,否则您实际上不会看到任何 JSON。

听起来您可能只是通过对对象进行预编码而不是让端点为您完成所需的工作。如果您确实需要手动将对象序列化为某个属性,您可以使用 Endpoints 端的库,如 Jackson 将对象序列化为字符串属性,并在客户端使用 NSJSONSerialization 将其转换回对象。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-03
    • 1970-01-01
    • 1970-01-01
    • 2011-09-22
    • 1970-01-01
    • 2012-01-10
    相关资源
    最近更新 更多