decodedData
为nil,但我的base64String包含一个非常长的字符串
编码
var imgProfile:NSData = UIImagePNGRepresentation(imgUI)
let base64String = imgProfile.base64EncodedStringWithOptions(.allZeros)
解码
let base64String = prefs.valueForKey("imgDefault") as? String
let decodedData = NSData(base64EncodedString: base64String!, options: NSDataBase64DecodingOptions(rawValue: 0) )
var decodedimage = UIImage(data: decodedData!)
我无法从base64输出我的图片
在插入db:之前base64字符串ENCODE
从db:下拉时,iVBORw0KGgoAAAANSUhEUgAAAgAAAAIACAMAAADDpiTIAAAADFBMVEXFxcX //// p6enW1tbAmiBwAAAAHGlET1QAAAACAAAAAAAAAQAAAAAoAAABAAAAAQAAAAYAppse6QAABcxJREFUeAHs3et22jAQReEQ3v + di8sikDaxZeGLdPTxpzS202jP9pwRkNWPDw8EEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQiCVwvV4 / p8fl9fH3K7cjsau2sBuBqfKvVf / X + ecnDQJtKSn9qw83DQIpDLqktcV / iECCAGFuXf9Rz6o / 5UHPEtTe + t9V0Qj6dGCb6t9d4EBvDrzb + B / 3gOlvsqAjB97M / F + RF / + KjUEfDuxU / nsb6APBwD / llsn / UycwDTQt1443 / 9MGSdCqA4eUXxK0Wv6P917xed7hJc8 + m6Uw7A922O1 / 90MOtGXaweWXA8OXnwINKXAtSe1dzvGWcQManND9nzIZBU434MjZ / 1n45zP7gVMVOPX2v1ugCZxowHnp / 2wBl4tJ4CwFzm7 / DwvEwCkGNND + vwzQBI5XoI32 / 1CAAUcb0Er7fxggBg41oKH2 / 2WAJnCcAg3Wf / rU4HEABv + Xmqw / Aw6zsq3x7xEB0596wBEStFt / Boxefwbsb0Br27 / XBJie2w7u60Dr9WfA6PVnwJ4GtDz / PbPAXmAvB / qov0lw9PozYB8Dern / pyyQAts70 Ojrv8 / of33mfYHNBeiq / t4X2L
base64字符串DECODE
可选(“iVBORw0KGgoAAAANSUhEUgAAAgAAAAIACAMAAADDpiTIAAAADFBMVEXFxcX //// p6enW1tbAmiBwAAAAHGlET1QAAAACAAAAAAAAAQAAAAAoAAABAAAAAQAAAAYAppse6QAABcxJREFUeAHs3et22jAQReEQ3v di8sikDaxZeGLdPTxpzS202jP9pwRkNWPDw8EEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQiCVwvV4 / p8fl9fH3K7cjsau2sBuBqfKvVf / X ecnDQJtKSn9qw83DQIpDLqktcV / iECCAGFuXf9Rz6o / 5UHPEtTe t9V0Qj6dGCb6t9d4EBvDrzb b / 3gOlvsqAjB97M / f rf / KjUEfDuxU / nsb6APBwD / llsn / UycwDTQt1443 / 9MGSdCqA4eUXxK0Wv6P917xed7hJc8 m6Uw7A922O1 / 90MOtGXaweWXA8OXnwINKXAtSe1dzvGWcQManND9nzIZBU434MjZ / 1n45zP7gVMVOPX2v1ugCZxowHnp / 2wBl4tJ4CwFzm7 / DwvEwCkGNND vwzQBI5XoI32 / 1CAAUcb0Er7fxggBg41oKH2 / 2WAJnCcAg3Wf / rU4HEABv Xmqw / Aw6zsq3x7xEB0596wBEStFt / Boxefwbsb0Br27 / XBJie2w7u60Dr9WfA6PVnwJ4GtDz / PbPAXmAvB / qov0lw9PozYB8Dern / pyyQAts70Ojrv8 / of33mfYHNB
答案 0 :(得分:2)
有两个不同的问题:
+
字符似乎已被空格替换。如果您提交application/x-www-form-urlencoded
请求而没有转义+
字符的百分比,则会发生这种情况。这可能发生在您第一次发送base64字符串以存储在数据库中时。
有关百分比编码模式的讨论,请参阅https://stackoverflow.com/a/24888789/1271826。这里的关键点是不依赖stringByAddingPercentEscapesUsingEncoding
,因为这样可以使+
字符无法转义。
该字符串也缺少尾随的=
个字符。 (字符串的长度应该是四的倍数,在这种情况下,它的两个字符很短,所以在{{1}的再现结尾处应该有==
它中的字符("之前的#34;字符串)。虽然这有时是由设计不佳的base64编码器造成的错误,但这不是+
遭受的问题。
在这种情况下,它看起来像一个更长的base64字符串必须以某种方式被截断。 (你的字符串可疑地接近1024个字符。哈哈。)如果你把参数放在URL而不是请求的主体中,就会发生这种截断。但是此代码示例中没有任何内容可以解释此行为,因此问题在其他地方存在。
但请查看原始base64EncodedStringWithOptions
的{{1}}。 base64字符串应该比它大1/3(加上四舍五入到最接近的四个字符,一旦包含尾随的length
字符)。
并且,一旦解码了您提供的字符串并查看实际内容,您还可以看到base64字符串被截断。 (根据提供的部分,应该有1484个字节的NSData
数据,而且没有,加上没有=
块......不用担心关于这些细节,但请放心,它基本上说PNG数据流不完整。)
答案 1 :(得分:0)
如果您返回nil,那么您的base64字符串无效。 NSData(base64EncodedString:options:)
需要一个base64字符串,其填充= = 4的倍数。
这是一个类似的问题(Obj-C除外)。 NSData won't accept valid base64 encoded string