Вы можете преобразовать строку в NSData
, содержащую байты, представляющие строку в другой кодировке, и разрешить преобразование с потерями, используя dataUsingEncoding:allowLossyConversion
.Тогда вы можете просто преобразовать NSData
обратно в NSString
:
NSString *unicode = @"Västerås, Sweden";
NSString *ascii = [[NSString alloc]
initWithData:[unicode dataUsingEncoding:NSASCIIStringEncoding
allowLossyConversion:YES
]
encoding:NSASCIIStringEncoding
];
Результат - "Вестерос, Швеция".Теперь есть метод lowercaseString
и т. Д., Если вам нужно идти дальше.
Редактировать:
Упс, пропустили конец вопроса "и все другие символы отбрасываются", вы делаетехочу пойти дальше:
NSString *lower = [ascii lowercaseString];
NSString *letters = [[lower
componentsSeparatedByCharactersInSet:[[NSCharacterSet letterCharacterSet]
invertedSet]
]
componentsJoinedByString:@""
];
Это выглядит ужасно (и хороший аргумент, чтобы преобразовать в C-строку и сделать это более напрямую), но это делает работу: componentsSeparatedByCharactersInSet:
возвращает массив строкобрабатывая символы в поставляемом наборе как разделители;componentsJoinedByString:
объединяет массив строк в одну строку, разделенную предоставленной строкой - и мы передали пустое объединение.