JSONObjectWithData возвращает значение null, если символ степени находится в объекте json

JSONObjectWithData возвращает значение null без ошибки, если строка json содержит знак градуса ° (U+00B0). Строка json отображается нормально, если я отправляю ее в свой настольный браузер.

Мой код (категория) с несколькими NSLogs, чтобы увидеть, что происходит, выглядит так...

+(NSDictionary*)dictionaryWithContentsOfJSONURLString:(NSString *)urlAddress{
     __autoreleasing NSError* error = nil;
    NSData* data = [NSData dataWithContentsOfURL:[NSURL URLWithString:urlAddress] options:NSDataReadingUncached error:&error];
    if (error != nil) {
        NSLog(@"%@",[error localizedDescription]);        
    }   else {
        NSLog(@"No Error: %@", data);  //looks good here. console displays the raw data 
    }

    id result = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&error];

    if (error != nil) {
        NSLog(@"%@",[error localizedDescription]);
        return nil;

    }   else {
        NSLog(@"No Error: %@", [result objectForKey:@"exams"]); //console displays the value ("No Error: value for key...") unless a degree symbol is present in which case it displays No Error: (null)

    }

    return result;

 }

Поэтому я не получаю никаких ошибок, но JSONOBjectWithData возвращает значение null, если полученная строка json содержит символ степени.

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

Это ошибка? Я должен что-то упустить.

Спасибо,

Джон


person user278859    schedule 05.07.2012    source источник
comment
Вы пытались вместо этого использовать escape-последовательность Unicode?   -  person Wug    schedule 05.07.2012
comment
Да, это работает, но большая проблема заключается в том, что символ степени может быть не единственными проблемами с символами, с которыми я могу столкнуться, поскольку значения являются пользовательскими записями в базе данных. Я надеялся, что смогу заставить xCode обрабатывать такие символы, поскольку я не знаю, какие символы Юникода мне нужно экранировать на сервере, пока не увижу, что он сломается.   -  person user278859    schedule 05.07.2012
comment
Я также сталкиваюсь с той же проблемой, можете ли вы поделиться кодом, как использовать escape-последовательность Unicode   -  person Akbar    schedule 15.05.2013
comment
это обходной путь, предложенный здесь в одном из более поздних ответов stackoverflow.com/ вопросы/4901133/   -  person Mousey    schedule 17.08.2015
comment
Распечатайте полученные байты, а затем проверьте с помощью средства просмотра символов на вашем Mac, что вы получаете правильный UTF-8. Например, если у вас тупой сервер, который отправляет данные в Windows-1252, то это не сработает. (Это не проблема iOS, я надеюсь, что любой парсер Windows JSON также отклонит это). Символ степени следует передавать как C2 B0. B0 сам по себе не является допустимым UTF-8 и, следовательно, недопустимым JSON.   -  person gnasher729    schedule 09.02.2016