gpt4 book ai didi

ios - 从 API 调用返回的 base64encoded 字符串在数据之后显示为 nil(base64encoded : data) is ran

转载 作者:行者123 更新时间:2023-11-28 11:29:51 24 4
gpt4 key购买 nike

我对这个很困惑。我一直认为我的服务器有问题,但在测试之后似乎使用 Data(base64encoded: data) 产生了 nil,即使数据在那里并且实际上是 base64 编码的。我已经尝试了我能想到的一切,但没有任何效果。这是我正在使用的代码和输出...

do {
print("DATA as a string: ", String(data: data!, encoding: .utf8) ?? "NONE AVAILABLE")
let decodedData = Data(base64encoded: data!, options: .ignoreUnknownCharacters)
print("DECODED DATA: ")
print(decodedData as Any)
let apiResponse = try JSONDecoder().decode(ApiConnectionResponse.self, from: decodedData!)
completion(.success(apiResponse))
} catch {
completion(.failure(error))
}

输出是...

Data as string: eyJzdWNjZXNzIjoiZmFsc2UiLCJlcnJvciI6Im1vYmlsZV9waW5fY29ubmVjdDogaW52YWxpZCBvciBleHBpcmVkIn0.

DECODED DATA: nil

所以字符串是一个合法的base64编码字符串,它解码为

{"success":"false","error":"mobile_pin_connect: invalid or expired"}

然而解码数据为零。我不明白,当字符串是base64编码的字符串而不是nil时,怎么会是nil。我什至试过像这样强行插入字符串......

let decodedData = Data(base64encoded: String(data: data!, encoding: .utf8))

仍然没有运气。它抛出一个 fatal error ,我可以在 Xcode 底部的部分看到数据实际上是“(数据?)92 字节”我不明白的是为什么在运行数据后它是零( )...

任何帮助将不胜感激,我真的很迷茫,无法弄清楚为什么我可以制作字符串,但不能制作数据。

最终结果是,我需要获取 JSONDecoder().decode 来处理来自服务器的回复,我想我可以完成这部分,如果我能弄清楚为什么在数据调用后它为 nil .谢谢。

最佳答案

您需要检查您的数据长度,除以 3,如果结果不为零,则添加一个或两个字节 (65) = 等号来填充您的数据。像这样尝试:

let decodedData = Data(base64Encoded: data + .init(repeating: 65, count: data.count % 3))

extension Data {
var base64encodedDataPadded: Data {
let data = last == 46 ? dropLast() : self
return data + .init(repeating: 65, count: data.count % 3)
}
}

Playground 测试:

let data = Data("eyJzdWNjZXNzIjoiZmFsc2UiLCJlcnJvciI6Im1vYmlsZV9waW5fY29ubmVjdDogaW52YWxpZCBvciBleHBpcmVkIn0.".utf8)
let decodedData = Data(base64Encoded: data.base64encodedDataPadded)!
print(String(data: decodedData, encoding: .utf8)!) // "{"success":"false","error":"mobile_pin_connect: invalid or expired"}"

关于ios - 从 API 调用返回的 base64encoded 字符串在数据之后显示为 nil(base64encoded : data) is ran,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57152934/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com