2010-01-23 9 views
13

Mi chiedo quale metodo sarebbe meglio per convertire const char * stringa di NSString.
Ho trovato che ci sono alcuni fatti.Convert const char * stringa di NSString con la lunghezza e la codifica

  • [NSString stringWithCString: length:] è un po 'deprecato.
  • [NSString stringWithCString: encoding] può essere utilizzato per il mio scopo

Ma voglio convertire con la lunghezza e la codifica (perché voglio fare che bene se ho un po 'di carattere non-ASCII impostando codifica UTF-8). qualche idea?

Penso solo che ora

  1. creare altri char e copia con la lunghezza utilizzando std :: strncpy (CH1, CH2, len)
  2. uso [NSString stringWithCString: encoding:]

Ma non funziona bene.

risposta

16

Usa:

[NSString initWithBytes:length:encoding]. 
33

Se il const char * variabile si chiama foo (e punta a una stringa con terminazione null), solo che

[NSString stringWithUTF8String:foo] 

Perché UTF-8 è un superset di ASCII, funzionerà sia se foo punti su UTF-8 o ASCII. Quindi puoi passare a Unicode completo senza problemi.

+4

Questo funziona solo se la stringa è ASCII, però. Se la tua stringa è qualcos'altro (es. MacRoman o ISO Latin), nel migliore dei casi si ottiene il glifo errato visualizzato per un determinato carattere, nella peggiore delle ipotesi si ottiene una stringa NIL perché si è verificato un errore nella generazione di byte che non 't mappare su un carattere UTF8 valido (Sì, è possibile. UTF8 codifica più di 256 caratteri diversi, quindi ci sono sequenze multi-byte che codificano un carattere, e alcune di queste non sono ancora valide .. – uliwitness

+0

Molto utile Grazie – vgonisanz

Problemi correlati