NSString from NSData - Сервер возвращает NSData с ведущими нулями - PullRequest
0 голосов
/ 15 сентября 2011

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

Когда я использую следующий код, строка выглядит пустой:

    NSString* newStr = [[[NSString alloc] initWithData:dataToBeLoaded encoding:NSUTF8StringEncoding] autorelease];

Это, очевидно, распространенная проблема, но я не видел четкого ответа о том, как преобразовать NSData в строку NSString.

До недавнего времени я видел эту проблему с промежуточным значением NSString, но она исчезла после того, как я удалил несколько (но не сотен) символов из начала и конца. Строка NSString после разборки была в порядке, поэтому я полагаю, что метод кодирования не был проблемой.

Есть ли встроенный метод, который будет делать это правильно? Мне нужно представить, что будет эффективнее код, который я напишу, чтобы проходить побайтово.

Кстати, когда я вручную отправляю запрос JSON на сервер в моем браузере, ответ возвращается как совершенно правильный JSON, без явных проблем, отображаемых на экране браузера.

Есть идеи, что мне делать? Спасибо.

1 Ответ

0 голосов
/ 16 сентября 2011

Данные, которые возвращаются с каждого сервера, содержат действительный JSON (во многих случаях проверяется с помощью JSON Lint).В одном случае возвращаемые данные - это оператор присваивания JavaScript, содержащий объект JSON.В другом случае это просто объект JSON.В обоих случаях я знаю, что объект JSON начинается с фигурной скобки.

Итак, чтобы убрать все начальные нули, я использую приведенный ниже код.Кажется, что некоторые методы обрабатывают строковые данные в строке NSString как строку C, но другие методы осознают, что есть еще кое-что, включая понимание длины.К счастью, rangeOfString и substringFromIndex выходят за пределы лидирующих нулей.

NSString* newStr = [[[NSString alloc] initWithData:dataToBeLoaded encoding:NSUTF8StringEncoding] autorelease];

if (newStr == nil) return;

NSRange headRange = [newStr rangeOfString:@"{"];
NSString *stripped = [newStr substringFromIndex:headRange.location];
...