Codage utf-8 [Résolu]

Signaler
Messages postés
25
Date d'inscription
lundi 20 mars 2006
Statut
Membre
Dernière intervention
27 septembre 2008
-
Messages postés
25
Date d'inscription
lundi 20 mars 2006
Statut
Membre
Dernière intervention
27 septembre 2008
-
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

11 réponses

Messages postés
285
Date d'inscription
mardi 28 décembre 2004
Statut
Membre
Dernière intervention
20 janvier 2013

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 !!!
Messages postés
1910
Date d'inscription
vendredi 18 juin 2004
Statut
Modérateur
Dernière intervention
14 novembre 2014
12
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
Messages postés
1910
Date d'inscription
vendredi 18 juin 2004
Statut
Modérateur
Dernière intervention
14 novembre 2014
12
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.
Messages postés
285
Date d'inscription
mardi 28 décembre 2004
Statut
Membre
Dernière intervention
20 janvier 2013

Oui, sauf qu'il dit que le fichier est déjà en UTF-8, il va donc directement lire de l'unicode donc aucun besoin de convertir ^^

Le travail c'est la santé, ne rien faire c'est la préserver !!!
Messages postés
1910
Date d'inscription
vendredi 18 juin 2004
Statut
Modérateur
Dernière intervention
14 novembre 2014
12
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.
Messages postés
285
Date d'inscription
mardi 28 décembre 2004
Statut
Membre
Dernière intervention
20 janvier 2013

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 !!!
Messages postés
1910
Date d'inscription
vendredi 18 juin 2004
Statut
Modérateur
Dernière intervention
14 novembre 2014
12
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.
Messages postés
285
Date d'inscription
mardi 28 décembre 2004
Statut
Membre
Dernière intervention
20 janvier 2013

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 !!!
Messages postés
1910
Date d'inscription
vendredi 18 juin 2004
Statut
Modérateur
Dernière intervention
14 novembre 2014
12
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é.
Messages postés
285
Date d'inscription
mardi 28 décembre 2004
Statut
Membre
Dernière intervention
20 janvier 2013

humm, d'accord, ca contredit tout ce que j'ai pu avoir en cours sur le sujet. Merci pour l'éclaircicement ;)

Le travail c'est la santé, ne rien faire c'est la préserver !!!
Messages postés
25
Date d'inscription
lundi 20 mars 2006
Statut
Membre
Dernière intervention
27 septembre 2008

Salut
Merci pour les informations.