Я думаю, что контрольный пример не работает; следующее:
NSString* str1 = @"est un r \u00c3\u00aa ve en noir";
NSLog(@"%@", str1);
Также выводит 'est un r ê en en noir'. Однако это:
NSString* str1 = @"est un rêve en noir";
NSLog(@"%@", str1);
Выводит 'est un rêve en noir', как и:
NSString* str1 = @"est un rêve en noir";
NSString* str = [NSString stringWithUTF8String:[str1 cStringUsingEncoding:NSUTF8StringEncoding]];
NSLog(@"%@", str);
И то же самое для немного более короткой версии:
NSString* str1 = @"est un rêve en noir";
NSString* str = [NSString stringWithUTF8String:[str1 UTF8Encoding]];
NSLog(@"%@", str);
И действительно:
char *str1 = "est un r\xc3\xaave en noir";
NSString* str = [NSString stringWithUTF8String:str1];
NSLog(@"%@", str);
Я думаю, что это вопрос JSON, а не UTF8. \ U, за которым следуют четыре шестнадцатеричных цифры, - это способ JSON кодировать универсальный символ UTF16, который не является неотъемлемой частью UTF. Так что NSString не знает, как с этим бороться. Ваш анализатор JSON должен быть адаптирован для правильного анализа escape-последовательностей.