Декодирование символов UTF8 в Objective C

Я пытаюсь разобрать фид из json webservice на моем iPhone, однако преобразование utf8 не работает так, как должно, или я делаю что-то не так. Вот кроме фида
est un r\u00c3\u00aave en noir

Вот код, который я написал для преобразования выше:

 NSString* str1 = @"est un r \u00c3\u00aa ve en noir"; NSString* str = [NSString stringWithUTF8String:[str1 cStringUsingEncoding:NSUTF8StringEncoding]]; NSLog(@"Converted UTF %@",str); 

Это результат, который я получаю:
Converted UTF est un r ê ve en noir

Ожидаемый результат должен быть
Converted UTF est un rêve en noir

Когда я проверил таблицу UTF и использовал онлайн-конвертер utf, вывод правильно получен с тем же кодом и с использованием строки @"est un r\u00EAve en noir" но я думаю, что представление UTF16, если я не ошибаюсь. Теперь я действительно исправляю, как разбирать этот фид.

После многого горения я понял это. Использовать это.

 NSString *correctString = [NSString stringWithCString:[utf8String cStringUsingEncoding:NSISOLatin1StringEncoding] encoding:NSUTF8StringEncoding]; 

Я думаю, что тестовый пример сломан; следующие:

 NSString* str1 = @"est un r \u00c3\u00aa ve en noir"; NSLog(@"%@", str1); 

Также выдается «est un r ê ve 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 должен быть адаптирован для правильного анализа управляющих последовательностей.

В iOS 9 ничего не нужно делать. Он преобразуется автоматически.

  NSURLSessionUploadTask *uploadTask = [session uploadTaskWithRequest:request fromData:postData completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) { NSLog(@"response header: %@",response); NSString* aStr; aStr = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; NSLog(@"response data: %@", aStr); NSDictionary * json = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil]; for (NSDictionary *dict in json) { NSLog(@"%@", dict); NSString *name = [dict objectForKey:@"name"]; NSString *msg = [dict objectForKey:@"message"]; NSString *topic = [dict objectForKey:@"topic"]; NSLog(@"*********** %@, %@, %@", name,topic,msg); // now do something } 

При отправке на сервер

 NSString* str1 = @"est un r \u00c3\u00aa ve en noir"; NSData *str1Data = [str1 dataUsingEncoding:NSNonLossyASCIIStringEncoding]; NSString *str2 = [[NSString alloc] initWithData:str1Data encoding:NSUTF8StringEncoding]; 

После получения вы можете декодировать так

 NSData *recivedStrData = [recivedStr dataUsingEncoding:NSUTF8StringEncoding]; NSString *strResult = [[NSString alloc] initWithData:recivedStrData encoding:NSNonLossyASCIIStringEncoding]; 

Это работает для меня!

  • Пробел над пользовательским представлением NSMenuItem
  • Что такое Objective C ++?
  • Как сделать преобразование строк в Objective-C?
  • Насколько хорошо поддерживается Objective-C ++?
  • Механизм отправки сообщения Objective C
  • В чем разница между «методом classа» и «статическим методом»?
  • GCD для выполнения задачи в основной теме
  • NSInvocation для чайников?
  • Обратный текст NSString
  • Как я могу получить UIBarButtonItem с изображением и текстом?
  • Должен ли я использовать свойства или прямую ссылку при доступе к переменным экземпляра внутри?
  • Давайте будем гением компьютера.