Вопрос

Я получаю доступ к RESTFUL URL и получаю обратно результаты.Результаты представлены в формате JSON.Я превращаю ответ в строку через:

- (void)connectionDidFinishLoading:(NSURLConnection   *)connection {
NSString *json = [[NSString alloc] initWithBytes:[self.receivedData mutableBytes] length:[self.receivedData length] encoding:NSUTF8StringEncoding];

Переменная json имеет значение 0x0.Когда я навожу на него курсор, я вижу <Invalid CFStringRef>.Как я могу отладить это, чтобы определить, почему это недопустимо?Я рендерю JSON, переданный обратно через браузер, в анализаторе JSON.Это прекрасно проверяется.

Результаты будут возвращены путем ввода идентификатора в URL-адрес.Другие идентификаторы возвращают результаты без проблем.Результирующий набор довольно велик.

Это было полезно?

Решение

Сначала я бы использовал initWithData:encoding: чтобы настроить NSString.Небольшая разница, но этот метод существует не просто так.

Затем я бы сделал шестнадцатеричный дамп из self.receivedData чтобы увидеть, что там на самом деле.Если эти данные неправильно закодированы в UTF8, то initWithData:encoding: потерпит неудачу.

(Google для шестнадцатеричного дампа NSData, чтобы найти служебные функции других людей для этого)

Я обнаружил, что иногда веб-сервисы неаккуратны в своей кодировке.Поэтому я обычно реализую запасной вариант, подобный этому:

NSString* html = [[NSString alloc] initWithData: data encoding: NSUTF8StringEncoding];
if (html == nil) {
    html = [[NSString alloc] initWithData: data encoding: NSISOLatin1StringEncoding];
    if (html == nil) {
        html = [[NSString alloc] initWithData: data encoding: NSMacOSRomanStringEncoding];
    }
}

Немного печально, что это требуется, но многие веб-сервисы написаны или настроены неправильно.

Другие советы

Использование NSLog чтобы посмотреть на байты.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top