Преобразуйте специальные символы, такие как ë, à, é, ä все в e, a, e, a? Цель C
Есть ли простой способ в объекте c преобразовать все специальные символы, такие как ë, à, é, ä, в нормальные символы, такие как e en a?
Ответы
Ответ 1
Да, и это довольно просто:
NSString *src = @"Convert special characters like ë,à,é,ä all to e,a,e,a? Objective C";
NSData *temp = [src dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES];
NSString *dst = [[[NSString alloc] initWithData:temp encoding:NSASCIIStringEncoding] autorelease];
NSLog(@"converted: %@", dst);
Запустив это на моей машине, выполните:
EmptyFoundation[69299:a0f] converted: Convert special characters like e,a,e,a all to e,a,e,a? Objective C
В принципе, мы просим строку преобразовать себе это NSData
(т.е. массив байтов), который представляет символы в строке в наборе символов ASCII. Поскольку не все символы в исходной строке находятся в ASCII, мы сообщим строке, что это ОК, чтобы сделать "потерянное" преобразование. Другими словами, это нормально, чтобы включить "& eacute;" в "e" и т.д.
Как только у нас будет наш массив байтов, мы просто вернем его в строку, и все готово!:)
Ответ 2
CFStringTransform
CFStringTransform - это решение, когда вы имеете дело с определенным языком. Он транслитерирует строки таким образом, чтобы упростить нормализацию, индексирование и поиск. Например, он может удалять знаки акцента с помощью опции kCFStringTransformStripCombiningMarks
:
CFMutableStringRef string = CFStringCreateMutableCopy(NULL, 0, CFSTR("Schläger"));
CFStringTransform(string, NULL, kCFStringTransformStripCombiningMarks,
false);
... => string is now "Schlager" CFRelease(string);
CFStringTransform
еще более эффективен, когда вы имеете дело с нелатинскими системами письма, такими как Арабский или Китайский. Он может преобразовать многие системы письма в Латинский script, что значительно упрощает нормализацию.
Например, вы можете преобразовать Китайский script в Латинский script следующим образом:
CFMutableStringRef string = CFStringCreateMutableCopy(NULL, 0, CFSTR("你好"));
CFStringTransform(string, NULL, kCFStringTransformToLatin, false);
... => string is now "nˇı hˇao"
CFStringTransform(string, NULL, kCFStringTransformStripCombiningMarks,
false);
... => string is now "ni hao" CFRelease(string);
Обратите внимание, что параметр просто kCFStringTransformToLatin
.
Исходный язык не требуется. Вы можете передать почти любую строку в это преобразование без необходимости знать, на каком языке он находится. CFStringTransform также может транслитерировать с латинского script на другой таких как арабский, хангульский, иврит и тайский.
Ссылки: Программирование iOS 7: переход к ограничениям