red*_*rem 13 base64 decode uiimage ios swift
我正在尝试使用以下代码将base64字符串解码为Swift中的图像:
let decodedData=NSData(base64EncodedString: encodedImageData, options: NSDataBase64DecodingOptions.IgnoreUnknownCharacters)
Run Code Online (Sandbox Code Playgroud)
不幸的是,变量codedData的值为nil
通过代码调试,我验证了变量encodedImageData不是nil并且是正确的编码图像数据(通过使用在线base64到图像转换器进行验证).可能是我的问题背后的原因是什么?
jla*_*rra 35
此方法需要填充"=",字符串的长度必须是4的倍数.
在base64的一些实现中,解码不需要填充字符,因为可以计算丢失字节的数量.但在Fundation的实施中,它是强制性的.
更新: 如评论中所述,最好首先检查字符串长度是否为4的倍数.如果encoded64具有您的base64字符串并且它不是常量,您可以执行以下操作:
斯威夫特2
let remainder = encoded64.characters.count % 4
if remainder > 0 {
encoded64 = encoded64.stringByPaddingToLength(encoded64.characters.count + 4 - remainder,
withPad: "=",
startingAt: 0)
}
Run Code Online (Sandbox Code Playgroud)
斯威夫特3
let remainder = encoded64.characters.count % 4
if remainder > 0 {
encoded64 = encoded64.padding(toLength: encoded64.characters.count + 4 - remainder,
withPad: "=",
startingAt: 0)
}
Run Code Online (Sandbox Code Playgroud)
斯威夫特4
let remainder = encoded64.count % 4
if remainder > 0 {
encoded64 = encoded64.padding(toLength: encoded64.count + 4 - remainder,
withPad: "=",
startingAt: 0)
}
Run Code Online (Sandbox Code Playgroud)
更新了一行版本:
或者您可以使用这一行版本,当其长度已经是4的倍数时返回相同的字符串:
encoded64.padding(toLength: ((encoded64.count+3)/4)*4,
withPad: "=",
startingAt: 0)
Run Code Online (Sandbox Code Playgroud)
小智 5
当字符数可被4整除时,您需要避免填充.
private func base64PaddingWithEqual(encoded64: String) -> String {
let remainder = encoded64.characters.count % 4
if remainder == 0 {
return encoded64
} else {
// padding with equal
let newLength = encoded64.characters.count + (4 - remainder)
return encoded64.stringByPaddingToLength(newLength, withString: "=", startingAtIndex: 0)
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
6687 次 |
最近记录: |