NSString - Unicode в ASCII эквивалент - PullRequest
19 голосов
/ 07 апреля 2010

Мне нужно преобразовать NSString в Unicode в NSString в ASCII, изменив все локальные символы Ą к А, Ś к S, Ó к О, к тебе, И так далее ...

Какой самый простой способ сделать это?

Ответы [ 5 ]

42 голосов
/ 07 апреля 2010

-[NSString dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES].

Все приведенные вами примеры обрабатываются так, как вы хотите. Похоже, символы без очевидного аналога, такие как ☃, переходят к «?».

7 голосов
/ 21 мая 2014
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);
2 голосов
/ 16 января 2014

Ответ Кена заменит «æ» на «ae» и «ß» на «s», но не заменит лигатуры œ, ij, ff, fi,,, fl, ffi, ffl, ſt, 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];
1 голос
/ 30 ноября 2011

Кодирование NSASCIIE в Objective C поддерживает только до 127, требуемый набор символов превышает 127 в таблице ASCII.

NSASCIIStringEncoding Строгое 7-битное кодирование ASCII в пределах 8-битных символов; Только значения ASCII 0… 127. Доступный в Mac OS X v10.0 и позже. Объявлено в NSString.h.

0 голосов
/ 30 мая 2013
NSData *data = [decode dataUsingEncoding:[NSString defaultCStringEncoding]];
decode = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
...