bonjour__
Messages postés25Date d'inscriptionlundi 20 mars 2006StatutMembreDernière intervention27 septembre 2008
-
22 sept. 2008 à 18:57
bonjour__
Messages postés25Date d'inscriptionlundi 20 mars 2006StatutMembreDernière intervention27 septembre 2008
-
27 sept. 2008 à 19:31
Bonjour
je vais cheche de lire une chaine de caractere dans fichier txt codé en UTF-8 par exemple les lettres arabes puis afficher le code a chaque caratere sur console.
quelqu'un peu m'aider
merci beaucoup
ctx_man
Messages postés285Date d'inscriptionmardi 28 décembre 2004StatutMembreDernière intervention20 janvier 20132 23 sept. 2008 à 17:47
Salut !
Concernant l'unicode, le type de données n'est pas "char" mais "wchar_t". l'objet "string" devient "wstring", la fonction "printf" devient "wprintf", et ainsi de suite ...
faire un petit "#define _UNICODE" peux grandement aider aussi, selon la plateforme et ce que tu veux faire.
Le travail c'est la santé, ne rien faire c'est la préserver !!!
racpp
Messages postés1910Date d'inscriptionvendredi 18 juin 2004StatutModérateurDernière intervention14 novembre 201415 24 sept. 2008 à 01:07
Tu peux regarder par exemple le Bloc-Notes. On a 4 types d'encodage dans la boite d'enregistrement du texte:
ANSI
Unicode
Unicode big endian (dont l'ordre des octets est inversé)
UTF-8
racpp
Messages postés1910Date d'inscriptionvendredi 18 juin 2004StatutModérateurDernière intervention14 novembre 201415 23 sept. 2008 à 22:52
Salut,
Tu peux convertir ta chaine en UNICODE grâce à la fonction MultiByteToWideChar() en lui passant comme premier paramètre CP_UTF8. La chaine obtenue sera donc une suite d'entiers 16 bits que tu pourras afficher sans problème.
racpp
Messages postés1910Date d'inscriptionvendredi 18 juin 2004StatutModérateurDernière intervention14 novembre 201415 24 sept. 2008 à 00:05
Un caractère en UTF8 est codé en 1, 2, 3 ou 4 octets. La valeur résultante est en UNICODE. D'après sa question, c'est cette valeur qu'il cherche à afficher. D'où la nécessité de convertir toute la chaine UTF8 en valeurs 16 bits (WCHAR) au lieu de devoir décoder ses caractères un par un.
ctx_man
Messages postés285Date d'inscriptionmardi 28 décembre 2004StatutMembreDernière intervention20 janvier 20132 24 sept. 2008 à 00:12
euh ... sa question c'est "lire un fichier texte encodé unicode", donc il va lire du wchar_t, c'est déjà de l'unicode, pas besoin de convertion, "puis affiche le code à chaque caractère", donc la il est suceptible d'avoir une conversion selon ce qu'il entend par "code", mais si convertion il y a, elle sera de l'unicode vers le MBCS et non l'inverse.
Le travail c'est la santé, ne rien faire c'est la préserver !!!
racpp
Messages postés1910Date d'inscriptionvendredi 18 juin 2004StatutModérateurDernière intervention14 novembre 201415 24 sept. 2008 à 00:26
Un caractère wchar_t est en 16 bits sous Windows. Un caractère UTF8 peut être codé en 8 bits, 16 bits, 24 bits ou 32 bits. Les bits de poids fort de chaque octet sont réservés au fonctionnement interne UTF8. Les bits restants expriment la valeur UNICODE du caractère.
ctx_man
Messages postés285Date d'inscriptionmardi 28 décembre 2004StatutMembreDernière intervention20 janvier 20132 24 sept. 2008 à 00:37
Nan mais depuis le début je suis bien d'accord avec toi sur le codage utf-8, ce que tu n'explique pas c'est pourquoi tu utilises une fonction de convertion de l'ASCII vers l'unicode alors qu'il lit déjà de l'unicode puisque le fichier est déjà encodé unicode.
Le travail c'est la santé, ne rien faire c'est la préserver !!!
racpp
Messages postés1910Date d'inscriptionvendredi 18 juin 2004StatutModérateurDernière intervention14 novembre 201415 24 sept. 2008 à 00:55
Son fichier n'est pas déjà encodé UNICODE. Il est plutôt encodé UTF8. Ce n'est pas la même chose. En donnant comme premier paramètre CP_UTF8 à la fonction MultiByteToWideChar() on convertit la chaine UTF8 en UNICODE. Cette fonction va lire chaque caractère de la chaine UTF8, qu'il soit codé en 1, 2, ou 3 octets et le convertir en caractère UNICODE codé sur 16 bits. Le premier paramètre de cette fonction permet de choisir le type d'encodage de la chaine source. S'il est à 0 (CP_ACP), c'est l'ANSI (ASCII Windows) qui est utilisé.