2010-04-07 13 views
19

Necesito convertir NSString en Unicode a NSString en ASCII cambiar todos los caracteres locales: A a A, S a S, O para O, ü au, Y así sucesivamente. ..NSString - Unicode a ASCII equivalente

¿Cuál es la forma más sencilla de hacerlo?

+0

solución perfecta http://stackoverflow.com/questions/6204718/status-code -0-on-google-geocode-api-from-iphone-sim-but-works-fine-on-web-non/6204970 # 6204970 felicitaciones ... – Moacir

Respuesta

41

-[NSString dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES].

Todos los ejemplos que proporcione se manejan como lo desee. Parece que los personajes no tienen un análogo obvio, como ☃, ve a '?'.

+0

Eso es todo. Gracias. – Jacek

+0

Esto solucionó mi problema http://stackoverflow.com/questions/6204718/status-code-0-on-google-geocode-api-from-iphone-sim-but-but-works-fine-on-web-non-e/6204970 # 6204970, gracias! – quantumpotato

1

La codificación NSASCIIE del Objective C solo admite hasta 127, el conjunto de caracteres que está buscando está más allá de 127 en la tabla ASCII.

NSASCIIStringEncoding Estricta codificación ASCII de 7 bits dentro de caracteres de 8 bits; ASCII valora 0 ... 127 solamente. Disponible en Mac OS X v10.0 y posterior. declarado en NSString.h.

0
NSData *data = [decode dataUsingEncoding:[NSString defaultCStringEncoding]]; 
decode = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; 
2

Ken respuesta reemplazará a "AE" con "AE" y "ß" con "s", pero no reemplazará ligaduras œ, ij, ff, fi, fi, fi, ffl, pies, st , ...

una solución mejorada es insertar primero las líneas adicionales de mapeo para manejar todo bien:

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]; 
7
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); 
Cuestiones relacionadas