我从服务器获取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字符串。请在解码来自服务器的字符串时建议我做错了什么。
答案 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