2010-05-23 10 views
12

Dada una cadena de caracteres, como "utf-8", "iso-8859-1", "us-ascii", etc., hay alguna forma integrada de obtener el NSStringEncoding apropiado en Cocoa ?Convertir nombre de conjunto de caracteres a NSStringEncoding

En este momento estoy buscando simplemente construir un NSDictionary que contenga una versión canonicalizada del nombre asignado a NSStringEncoding, y luego tener un mecanismo de búsqueda que canonicalice la entrada de la misma manera. ¿Pero realmente no hay manera de obtener NSUTF8StringEncoding dada la cadena "UTF-8", etc.?

Respuesta

21

Tienes que pasar por CoreFoundation.

CFStringConvertIANACharSetNameToEncoding 
CFStringConvertEncodingToNSStringEncoding 

primer lugar la conversión de la IANA Char ajustado a valor CFStringEncoding (que no es el mismo que NSStringEncoding) y luego convertir el CFStringEncoding a NSStringEncoding.

NSString *encodingString = @"utf-8" 
NSStringEncoding encoding = CFStringConvertEncodingToNSStringEncoding(CFStringConvertIANACharSetNameToEncoding((CFStringRef) encodingString)); 
+0

Gracias, que parece que debería hacer el truco. – d11wtq

1

No creo que haya ninguna forma incorporada de lograr esto. Creo que lo que sugiere, construir un diccionario con los valores, es una forma sensata de hacerlo aquí. No hay tantas codificaciones, por lo que debería ser bastante trivial, y probablemente más rápido que tratar de encontrar una forma integrada de hacerlo.

2
NSStringEncoding utfEncoding = NSUTF8StringEncoding; 
NSLog(@"%lu",utfEncoding); 

NSString * utf8Name = @"UTF-8"; 
CFStringEncoding aEncoding = CFStringConvertIANACharSetNameToEncoding((CFStringRef)utf8Name); 
utfEncoding = CFStringConvertEncodingToNSStringEncoding(aEncoding); 
NSLog(@"%lu",utfEncoding); 
Cuestiones relacionadas