Fre*_*076 3 base64 nsdata swift
我在Swift中与服务器通信,检索图像数据.传入的数据被编码为base64字符串.我能够正确接收和显示编码的字符串.当我去使用NSData该类将字符串解码回二进制数据并显示...
println(NSData(base64EncodedString: imageString, options: NSDataBase64DecodingOptions(0)))
Run Code Online (Sandbox Code Playgroud)
输出是
nil
nil
nil
nil
nil
nil
Run Code Online (Sandbox Code Playgroud)
每个收到的图像一个.
我也试过了
println(NSData(base64EncodedString: imageString, options: nil))
Run Code Online (Sandbox Code Playgroud)
和相同的结果.沿路有什么我想念的吗?我会把图像串放好但是它们很长......
对于可能遇到此问题的其他人,请确保您的Base64编码字符串的长度可被4整除(=应该用于填充长度).
请参阅此处的StackOverflow答案:https://stackoverflow.com/a/36366421/330494
根据 Frank Schmitt 和 Barlow Tucker 的答案,我创建了一个扩展来Data更好地处理 base64 编码:
extension Data {
static func decodeUrlSafeBase64(_ value: String) throws -> Data {
var stringtoDecode: String = value.replacingOccurrences(of: "-", with: "+")
stringtoDecode = stringtoDecode.replacingOccurrences(of: "_", with: "/")
switch (stringtoDecode.utf8.count % 4) {
case 2:
stringtoDecode += "=="
case 3:
stringtoDecode += "="
default:
break
}
guard let data = Data(base64Encoded: stringtoDecode, options: [.ignoreUnknownCharacters]) else {
throw NSError(domain: "decodeUrlSafeBase64", code: 1,
userInfo: [NSLocalizedDescriptionKey: "Can't decode base64 string"])
}
return data
}
}
Run Code Online (Sandbox Code Playgroud)
所以在你的代码中,你可以像这样使用它:
let baseEncodeText = "(.....)" //your base64 encoded string
let data = try Data.decodeUrlSafeBase64(baseEncodeText)
Run Code Online (Sandbox Code Playgroud)