Base64 в iPhone возвращает другой результат, чем другие инструменты - PullRequest
0 голосов
/ 24 марта 2012

Я пытаюсь закодировать в base64 изображение для загрузки на iOS, но глупость не имеет встроенной поддержки, поэтому я скачал две библиотеки и опробовал их обе, но я думаю, что они возвращают неправильные значения ( если я не понимаю base64 даже меньше, чем я думаю). Этот веб-сайт возвращает длинную строку, которая начинается с этого: /9j/4Q+zRXhpZgAASUkqAAgAAAAKAA4BAgAgAAAAhgAAAA8BAgAFAAAApgAAABABAgAKAA Когда я шифрую, используя библиотеку , которую я скачал, она начинается с этого: iVBORw0KGgoAAAANSUhEUgAAAI0AAABnCAIAAACy41YWAABAAElEQVR4AbzdeaylyXUY9nf3 Я на 100% уверен, что первое правильно, потому что когда я использую тестовую программу, написанную для тестирования сервера, это тот же код, который он загружает на сервер, и сервер успешно декодирует файл и сохраняет изображение. Здесь - тестовое изображение.

По сути, я думаю, что мне нужно получить другую библиотеку для iPhone / iPad. Еще одна странная вещь, которую я заметил, заключается в том, что для некоторых изображений символ = будет в конце строки, а для других - нет. Для этого есть три причины.

1) iPhone не хватает памяти, и он не хочет сообщать мне об этом, просто загружает то, что имеет.

2) библиотека не работает

3) Я запутался и не понимаю base64

Есть предложения?

РЕДАКТИРОВАТЬ: iPhone на самом деле симулятор, поэтому я не знаю, не исчерпает ли он память раньше, чем компьютер. Я знаю, что эмулятор Android этого не делает, но я не уверен насчет симулятора iOS.

1 Ответ

5 голосов
/ 24 марта 2012

Выходные данные iPhone отображаются в начале PNG для стандартного декодирования base64 (например, this ). Другой вариант, который вы предлагаете (который я обрезал до '/ 9j / 4Q + zRXhpZgAASUkqAAgAAAAKAA4BAgAgAAAAhgAAAA8BAgAFAAAApgAAABABAgAK', чтобы он был действительной длиной base64), начинается с FFD8, JPEG JPEG, если вы хотите, то я получаю текстовый код JPEG, то есть я получаю JPEG-код, так что я хочу, чтобы в нем присутствовал JPEG-код SOI, а затем я сказал, что в JPEG JPEG есть SOI, а затем я имею в виду, что я выражаю JPEG в качестве SOI.

Возможно, вы случайно закодировали разные файлы для сравнения?

Кстати, быстрый совет, если он поможет вам проверить вашу работу - в iPhone встроено декодирование base64, но не очевидно. Хитрость заключается в том, чтобы создать URL-адрес данных в кодировке base 64 и попросить NSData загрузить его. Э.Г.

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

Где непосредственно за data:;base64, следуют ваши данные base64.


Приложение, три года спустя: поскольку iOS 7 NSData прямо предложила -initWithBase64EncodedString:options:, поэтому больше не нужно формулировать URL данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...