2010-01-22 7 views
1

Dans une application objectif-c/cacao, j'utilise des fonctions c pour ouvrir un fichier texte, le lire ligne par ligne et utiliser certaines lignes dans un tiers fonction. En pseudo-code:Lecture et édition de chaînes UTF-8 dans c/cacao

char *line = fgets(aFile); 
library_function(line); // This function calls for a utf-8 encoded char * string 

Cela fonctionne bien jusqu'à ce que le fichier d'entrée contient des caractères spéciaux (tels que des accents ou l'UTF-8 BOM), après quoi les sorties de fonctions de bibliothèque caractères mutilés.


Cependant, si je fais ceci:

char *line = fgets(aFile); 
NSString *stringObj = [NSString stringWithUTF8String:line]; 
library_function([stringObj UTF8String]); 

Ensuite, tout fonctionne très bien et la chaîne est correctement émis.


Qu'est-ce que la ligne [NSString... faire que je ne suis pas? Est-ce que je fais quelque chose de mal avec la façon dont la ligne est récupérée au départ? Ou est-ce autre chose entièrement?

Répondre

1

UTF-8 est un jeu de caractères multi-octets (see wikipedia), ce qui signifie que certains caractères requièrent plusieurs octets (les caractères accentués que vous avez utilisés). Le type char de C est un octet unique, donc la définition de "caractère" de C ne correspond pas à celle d'Unicode.

Si vous souhaitez lire Unicode avec le langage C RTL standard, vous devez également utiliser une bibliothèque de conversion Unicode, telle que libiconv.

(L'utilisation wchar_t peut aussi travailler, je ne l'ai jamais fait des recherches.)

Ou vous pouvez utiliser NSString, qui prend déjà en charge Unicode.