Различные виды декодирования UTF8 в NSString - PullRequest
2 голосов
/ 27 июля 2011

Я много искал о декодировании UTF8, но пока не нашел ответа.

Я получаю NSString декодирования UTF-8 от моего NSXMLParser:

NSString *tempString = @"Test message readability is óké";

В некоторых случаях я не могу найти способ изменить этот кодированный текст на:

Test message readability is óké

Я мог бы рассказать все варианты, которые я пробовал, но я не думаю, что это необходимо. Не могли бы вы помочь?

Thnx!

Ответы [ 3 ]

4 голосов
/ 27 июля 2011

NSXMLParser будет обрабатывать текст с использованием кодировки символов, указанной в XML.Я полагаю, что в вашем случае XML не указывает явно UTF-8.

Текст выглядит как ISO Latin 1. Если вы не можете ничего сделать с сервером, генерирующим XML, вы можете применить этот хак:

char* tempString = [string cStringUsingEncoding:NSISOLatin1StringEncoding];
string = [NSString stringWithUTF8String:tempString];

Я проверил, что это работает, проверив это из приглашения GDB:

po [NSString stringWithUTF8String:(char*)[@"Test message readability is óké" cStringUsingEncoding:5]]
3 голосов
/ 27 июля 2011

Вы делаете это неправильно.То, что вы хотите:

char *s = "Test message readability is óké";
//Note: this is a one-byte-character C string, not an NSString!
NSString *tempString = [NSString stringWithCString:s encoding:NSUTF8StringEncoding];

Также имейте в виду, что когда вы инициализируете строковые константы, то, что фактически идет в память программы, зависит от кодировки текущего файла.Если это уже UTF-8, то символы будут кодироваться дважды - вы получите символы Ã, ³ и т. Д., Закодированные как UTF8 в строке C.

Другими словами, использование строковой константывероятно, неправильный шаг для начала.Пожалуйста, дайте больше контекста проблемы.

1 голос
/ 23 января 2013

Стандартное кодирование и декодирование, например:

Для кодирования:

NSString *content =  [bodyTextView.text stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

Для декодирования:

NSString *decodedString = [msg.content stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
...