Мне нужно преобразовать NSString в unicode в NSString в ASCII, изменяя все локальные символы: Ą до A, Ś до S, От O до O, ü to u, И так далее...
Каков самый простой способ сделать это?
Мне нужно преобразовать NSString в unicode в NSString в ASCII, изменяя все локальные символы: Ą до A, Ś до S, От O до O, ü to u, И так далее...
Каков самый простой способ сделать это?
-[NSString dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES]
.
Все приведенные вами примеры обрабатываются по вашему желанию. Похоже, что символы без очевидного аналога, такие как ☃, переходят к '?'.
NSString *unicode = @"Chào mừng đến với Việt Nam.";
NSString *standard = [unicode stringByReplacingOccurrencesOfString:@"đ" withString:@"d"];
standard = [standard stringByReplacingOccurrencesOfString:@"Đ" withString:@"D"];
NSData *decode = [standard dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES];
NSString *ansi = [[NSString alloc] initWithData:decode encoding:NSASCIIStringEncoding];
NSLog(@"ANSI: %@", ansi);
Кен ответ заменит "æ" на "ae" и "ß" на "s", но не заменит лигатуры œ, ij, ff, fi, fl, ffi, ffl, ft, st,...
Улучшенное решение состоит в том, чтобы сначала вставить дополнительные строки отображения для обработки всего штрафа:
string = [string stringByReplacingOccurrencesOfString:@"Œ" withString:@"OE"];
string = [string stringByReplacingOccurrencesOfString:@"œ" withString:@"oe"];
string = [string stringByReplacingOccurrencesOfString:@"Đ" withString:@"D"];
string = [string stringByReplacingOccurrencesOfString:@"đ" withString:@"d"];
string = [string precomposedStringWithCompatibilityMapping];
NSData *data = [string dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES];
NSString *newString = [[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding];
Objective C NSASCIIEncoding поддерживает только до 127, набор символов, который вы ищете, находится за пределами 127 в таблице ASCII.
NSASCIIStringEncoding Строгая 7-битная кодировка ASCII в 8-битных символах; Только значения ASCII 0... 127. Доступно в Mac OS X версии 10.0 и более поздних версиях. Объявлено в NSString.h.
NSData *data = [decode dataUsingEncoding:[NSString defaultCStringEncoding]];
decode = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];