iPhone中的Base64返回与其他工具不同的结果

时间:2012-03-23 22:21:31

标签: iphone ios ipad base64

我正在尝试base64编码图像以便在iOS上传,但是愚蠢的东西没有内置支持,所以我下载了两个库并尝试了它们,但我认为它们返回了错误的值(除非我理解base64甚至比我想的还要少。) This网站返回一个以此开头的长字符串:/9j/4Q+zRXhpZgAASUkqAAgAAAAKAA4BAgAgAAAAhgAAAA8BAgAFAAAApgAAABABAgAKAA 当我使用我下载的library进行加密时,它从以下内容开始:iVBORw0KGgoAAAANSUhEUgAAAI0AAABnCAIAAACy41YWAABAAElEQVR4AbzdeaylyXUY9nf3 我100%确定第一个是正确的,因为当我使用编写的测试程序来测试服务器时,它与上传到服务器的代码相同,服务器会愉快地解码文件并保存图像。 Here是测试图像。

基本上,我在想的是我需要为iPhone / iPad建立一个不同的库。我注意到的另一个奇怪的事情是,对于某些图像,=将位于字符串的末尾,而对于其他图像则不会。我可以为此考虑三个原因。

1)iPhone内存不足,不想告诉我它只是上传了它的内容。

2)图书馆坏了

3)我很困惑,不理解base64

有什么建议吗?

编辑:iPhone实际上是模拟器,所以我不知道它是否会在计算机之前用完内存。我知道android模拟器没有,但我不确定iOS模拟器。

1 个答案:

答案 0 :(得分:5)

iPhone输出似乎按照标准base64解码(例如this one)映射到PNG的开头。您提供的另一个选项(我将其修剪为'/ 9j / 4Q + zRXhpZgAASUkqAAgAAAAKAA4BAgAgAAAAhAAAAA8BAgAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

您是否有可能无意中编码了不同的文件进行比较?

哦,顺便提一下,如果它可以帮助你测试你的工作 - iPhone内置64位解码,但不是很明显。诀窍是创建一个基于64编码的数据URL,并要求NSData加载它。 E.g。

NSData *decodedData = [NSData dataWithContentsOfURL:
     [NSURL URLWithString:
         @"data:;base64,/9j/4Q+zRXhpZgAASUkqAAgAAAAKAA4BAgAgAAAAhgAAAA8BAgAFAAAApgAAABABAgAK"]];

data:;base64,后面直接跟随您的base64数据。


附录,三年后:由于iOS 7 NSData已直接提供-initWithBase64EncodedString:options:,因此无需再制定数据网址。