2009-07-30 7 views
4

Je dois lire un fichier texte Unicode avec codage UTF-8 et écrire ces données dans un autre fichier texte. Le fichier contient des données séparées par des tabulations.Lecture d'un fichier Unicode UTF-8 via un code non-unicode

Mon code de lecture est du code C++ sans support Unicode. Ce que je fais est de lire le fichier ligne par ligne dans un string/char* et de mettre cette chaîne tel quel dans le fichier de destination. Je ne peux pas changer le code, donc les suggestions de changement de code ne sont pas les bienvenues. Ce que je veux savoir, c'est que lors de la lecture ligne par ligne, je peux rencontrer un caractère de fin NULL ('\ 0') dans une ligne car il est unicode et un caractère peut couvrir plusieurs octets. Je pensais qu'il est tout à fait possible qu'un caractère de fin NULL puisse être rencontré dans une ligne. Tes pensées?

Répondre

13

UTF-8 utilise 1 octet pour tous les caractères ASCII, qui ont les mêmes valeurs de code comme dans la norme Encodage ASCII et jusqu'à 4 octets pour les autres caractères. Les bits supérieurs de chaque octet sont réservés en tant que bits de contrôle. Pour les points de code utilisant plus de 1 octet, les bits de contrôle sont définis.

Ainsi, il n'y aura pas de caractère 0 dans votre fichier UTF-8.

Vérifier Wikipedia for UTF-8

+2

En fait, UTF-8 a été spécialement conçu pour que ce soit vrai car il est utile d'avoir un encodage dans lequel la plage ASCII est stockée dans un octet chacun, et qui fonctionne de manière sensée quand on passe à 'strcpy() et ses amis. – RBerteig

1

Très peu probable: tous les octets dans une séquence d'échappement UTF-8 ont le bit supérieur mis à 1.

+0

Maurice, est-il référence l'appui de cette déclaration? – Aamir

+0

Voir le message de CsTamas –

+2

Voir http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 –

Questions connexes