NSString с кириллицей в кодировку UTF8/Latin

У меня есть строка, поступающая из веб-службы, это смесь символов кириллицы и латиницы / английского языка. При построении массива путем разделения слов в предложении он показывает вместо букв буквы Unicode при использовании NSLog. Я хочу знать, как преобразовать любой из символов кириллицы / юникода в правильно читаемое латинское / английское слово. Например..

NSString *sentence = @"The Tobе Elіte"; (e in Tobe is Cyrillic, and i in Elite)

После помещения каждого слова в строке в массив, при печати я получаю это:

(
The,
"Tob\U0435",
"El\U0456te"
)

Мне нужно это, чтобы транслитерировать на латинский "Tobe" и латинский "Elite". Если я попытаюсь сравнить то, что я имею сейчас, делая

if(![@"Tobe" isEqualToString:[array objectAtIndex:1]])
      //Tobe is not Equal to Tob\U0435

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

NSMutableString *buffer = [string mutableCopy];
CFMutableStringRef bufferRef = (__bridge CFMutableStringRef)buffer;
CFStringTransform(bufferRef, NULL, kCFStringTransformToLatin, false);

В конечном итоге мне нужно найти в массиве подходящие слова, используя NSPredicate, но с Unicode в массиве это не позволяет мне это делать. Любая помощь приветствуется.

1 ответ

Решение

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

NSString *sentence = @"The Tobе Elіte";
NSMutableString *buffer = [sentence mutableCopy];
CFMutableStringRef bufferRef = (__bridge CFMutableStringRef)buffer;
CFStringTransform(bufferRef, NULL, kCFStringTransformToLatin, false);
CFStringTransform(bufferRef, NULL, kCFStringTransformStripDiacritics, false);
NSArray *arr = [buffer componentsSeparatedByString:@" "];
NSLog(@"%@", arr);

и вы можете найти больше информации здесь: http://nshipster.com/cfstringtransform/

Другие вопросы по тегам