Question

Dans un objectif-c / app de cacao, je suis en utilisant les fonctions de c pour ouvrir un fichier texte, lu ligne par ligne et utiliser quelques lignes en fonction des tiers. En code psuedo:

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 de [NSString... faire que je ne suis pas? Est-ce que je fais quelque chose de mal avec la façon dont la ligne est adjugée au départ? Ou est-ce autre chose?

Était-ce utile?

La solution

UTF-8 est un ensemble de caractères multi-octets ( voir wikipedia ), ce qui signifie que certains caractères nécessitent plusieurs octets (ceux que vous avez accentués) en exécutez. Le type C est char de un seul octet, donc la définition de C de « caractère »

de ne correspond pas à Unicode.

Si vous voulez lire Unicode avec la norme C RTL, vous aurez également besoin d'utiliser une bibliothèque de conversion Unicode, comme libiconv .

(L'utilisation wchar_t peut également travailler;. Je ne l'ai jamais fait des recherches)

Vous pouvez aussi utiliser NSString, qui prend déjà en charge Unicode.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top