Base 64解码

时间:2018-06-07 11:42:21

标签: ios swift

我从服务器获取base64字符串,如下所示

eyJhY3IiOjIsInN1YiI6IjNmZDFhNzQwLWJjZTItMTAzNS04NDUxLWVkODRlMTM4MmFhMiIsImF1ZCI6IjZjZjY3M2ZkLTlkODEtNDU5OS04MGJkLWM5ODRiMmNiZDQ2NSIsIm...

我尝试使用以下代码(作为字符串扩展名)来决定此字符串

//: ### Base64 decoding a string
func base64Decoded() -> String? {
    guard let data = Data(base64Encoded: self) else { return nil }
    return String(data: data, encoding: .utf8)
}

但它重新调整为零。

还尝试使用以下代码(来自GIT

guard let plainData = (serverString as NSString).dataUsingEncoding(NSUTF8StringEncoding) else {
    fatalError()
}

let base64String = plainData.base64EncodedStringWithOptions(NSDataBase64EncodingOptions(rawValue: 0))
print(base64String) // Zm9v
// Decoding
if let decodedData = NSData(base64EncodedString: base64String, options: NSDataBase64DecodingOptions(rawValue: 0)),
    let decodedString = NSString(data: decodedData, encoding: NSUTF8StringEncoding) {
        print(decodedString) // foo
}

但是,我仍然无法读取来自服务器的Base64字符串。请在解码来自服务器的字符串时建议我做错了什么。

2 个答案:

答案 0 :(得分:1)

我相信你错过了base64编码的重点。

你得到的是一个代表任何数据的UTF8字符串。通过解码此字符串,您可以获得数据这些数据可能是也可能不是字符串,在您的情况下,它们似乎不是。

使用简单的在线工具,我发现您在此处粘贴的字符串转换为:

{"acr":2,"sub":"3fd1a740-bce2-1035-8451-ed84e1382aa2","aud":"6cf673fd-9d81-4599-80bd-c984b2cbd465","

现在您从Data(base64Encoded:获取数据,然后您可能正在寻找JSONSerialization.jsonObject(with:来获取这些数据中的字典。

但是根本没有理由将base64字符串转换为数据然后转换为UTF8字符串。您的方法应如下所示:

func base64Decoded() -> Data? {
    return Data(base64Encoded: self)
}

然后您可以随心所欲地做任何事情:

if let data = serverString.base64Decoded(), let dictionary = (try? JSONSerialization.jsonObject(with: data, options: .allowFragments)) as? [String: Any] {
    // Do something with dictionary
}

答案 1 :(得分:1)

请尝试下面的一个:

ZYX