2010-01-23 21 views
13

Me pregunto qué método sería mejor para convertir const char * string en NSString.
Encontré que hay algunos hechos.Const const char * string a NSString con longitud Y codificación

  • [NSString stringWithCString: length:] está como obsoleto.
  • [NSString stringWithCString: codificación] se pueden usar para mi propósito

Pero quiero convertir con la longitud y la codificación (porque quiero hacer ese bien si tengo algo de carácter no ASCII mediante el establecimiento de codificación de UTF-8). ¿Alguna idea?

sólo pienso ahora

  1. crear otra carbón y copia de longitud mediante el uso de std :: strncpy (CH1, CH2, len)
  2. uso [NSString stringWithCString: codificación:]

Pero no funciona bien.

Respuesta

16

Uso:

[NSString initWithBytes:length:encoding]. 
33

Si su const char * variable se denomina foo (y apunta a una cadena terminada en cero), a decir

[NSString stringWithUTF8String:foo] 

Debido a UTF-8 es un superconjunto de ASCII, esto funcionará ya sea que foo apunte a UTF-8 o ASCII. Luego puede pasar a Unicode completo sin problemas.

+4

Esto solo funciona si su cadena es ASCII. Si su cadena es cualquier otra cosa (ej. MacRoman o ISO Latin), en el mejor de los casos obtendrá el glifo incorrecto para un personaje en particular, en el peor obtendrá una cadena NIL porque usted generó una secuencia no válida de bytes que no funciona mapear a un personaje UTF8 válido (Sí, eso es posible. UTF8 codifica mucho más de 256 caracteres diferentes, por lo que hay secuencias de varios bytes que codifican un carácter, y algunas de ellas no son válidas (aún). – uliwitness

+0

Muy útil Gracias – vgonisanz

Cuestiones relacionadas