这种方法需要使用“=”进行填充,字符串长度必须是4的倍数。
在某些base64实现中,解码时不需要填充字符,因为可以计算出缺少的字节数。但在Fundation的实现中,填充是强制性的。
更新:
如评论中所述,最好先检查字符串长度是否已经是4的倍数。如果encoded64包含您的base64字符串并且它不是一个常量,则可以执行以下操作:
Swift 2
let remainder = encoded64.characters.count % 4
if remainder > 0 {
encoded64 = encoded64.stringByPaddingToLength(encoded64.characters.count + 4 - remainder,
withPad: "=",
startingAt: 0)
}
Swift 3
let remainder = encoded64.characters.count % 4
if remainder > 0 {
encoded64 = encoded64.padding(toLength: encoded64.characters.count + 4 - remainder,
withPad: "=",
startingAt: 0)
}
Swift 4
let remainder = encoded64.count % 4
if remainder > 0 {
encoded64 = encoded64.padding(toLength: encoded64.count + 4 - remainder,
withPad: "=",
startingAt: 0)
}
更新为一行代码版本:
当字符串长度已经是4的倍数时,您可以使用以下一行代码版本返回相同的字符串:
encoded64.padding(toLength: ((encoded64.count+3)/4)*4,
withPad: "=",
startingAt: 0)
let decodedData=NSData(base64EncodedString: encodedImageData, options: NSDataBase64EncodingOptions())
- Eric Aya