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

nic*_*ick 0 iphone base64 ipad ios

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

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

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

2)图书馆坏了

3)我很困惑,也不懂base64

有什么建议?

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

Tom*_*mmy 5

iPhone输出似乎按照标准base64解码(例如解码)映射到PNG的开头.为您提供(我修剪成"/ 9J/4Q + zRXhpZgAASUkqAAgAAAAKAA4BAgAgAAAAhgAAAA8BAgAFAAAApgAAABABAgAK"是有效的base64长度)另一种选择与FFD8的JPEG SOI标记开始,然后包含文本的Exif所以我愿意说是JPEG.

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

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

NSData *decodedData = [NSData dataWithContentsOfURL:
     [NSURL URLWithString:
         @"data:;base64,/9j/4Q+zRXhpZgAASUkqAAgAAAAKAA4BAgAgAAAAhgAAAA8BAgAFAAAApgAAABABAgAK"]];
Run Code Online (Sandbox Code Playgroud)

其中data:;base64,直接跟随base64数据.


三年后的附录:由于iOS 7 NSData直接提供,-initWithBase64EncodedString:options:因此不再需要制定数据URL.