NSData to NSString с использованием initWithBytes: length: encoding - PullRequest
4 голосов
/ 10 ноября 2010

У меня есть некоторые данные изображения (jpeg), которые я хочу отправить из своего приложения для iPhone на мой веб-сервис. Для этого я использую NSData из изображения и преобразую его в строку, которая будет помещена в мой JSON.

В настоящее время я делаю это:

    NSString *secondString = [[NSString alloc]  initWithBytes:[result bytes]
                                                    length:[result length] 
                                                  encoding:NSUTF8StringEncoding];

Где результат типа NSData. Однако secondString кажется нулевым, хотя длина результата возвращает реальное значение (например, 14189). Я использовал этот метод, поскольку результат является необработанными данными и не заканчивается нулем.

Я что-то не так делаю? Я использовал этот код в других областях, и он, кажется, работает нормально (но те области, которые я использую в настоящее время, включают текст, а не данные изображения).

ТИА.

Ответы [ 2 ]

2 голосов
/ 10 ноября 2010

Вы не конвертируете данные в строку.Вы пытаетесь интерпретировать ее как строку в кодировке UTF-8, которая завершится ошибкой, если данные действительно не являются строкой в ​​кодировке UTF-8.Лучше всего как-нибудь кодировать его, возможно, с помощью Base64, как предлагает Мэнни, и затем снова декодировать на сервере.

2 голосов
/ 10 ноября 2010

Для двоичных данных лучше кодировать их с использованием кодировки Base64, а затем декодировать их в веб-службе. Я использую класс NSData + Base64, загруженный из здесь , эта ссылка также взята из Stackoverflow, ответ , сделанный @Ken (Спасибо, Кен!).

...