De lecture et délivrer en sortie des chaînes UTF-8 en c / cacao
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?
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 »
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.