Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Code unicode dans un char*

1 réponse
Avatar
cyril.delmas
Bonjour a tous

quelqu'un saurait-il comment on peut, =E0 partir d'une chaine (par
exemple un char*), r=E9cup=E9rer les codes unicode des caract=E8res (i.e.
=E9=3D233, A=3D65, etc...), afin d'=E9crire les caracteres sous la forme
&#???;

J'ai recherch=E9 du cot=E9 des locales, mais j'ai pas trouv=E9 (j'ai
cherch=E9 longtemps pourtant !!!)

ps : pour les carat=E8res ascii c'est simple, c'est le meme code... mais
pour les autres....

1 réponse

Avatar
James Kanze
quelqu'un saurait-il comment on peut, à partir d'une chaine (par
exemple un char*), récupérer les codes unicode des caractères (i.e.
é#3, Ae, etc...), afin d'écrire les caracteres sous la forme
&#???;


J'ai recherché du coté des locales, mais j'ai pas trouvé (j'ai cherché
longtemps pourtant !!!)


ps : pour les caratères ascii c'est simple, c'est le meme code... mais
pour les autres....


Pour tous les caractères, il dépend de l'encodage -- il existe (ou a
existé, au moins) des implémentations EBCDIC.

La solution générale est assez simple : tu utilises une table de
transcodage, c-à-d un tableau qui est indexé par ton char (probablement
converti en unsigned char). Donc, si dans ton encodage, 0xA3 est 'é', à
l'indice 0xA3 du tableau, tu mets 0x00E9. Évidemment, il faut savoir
l'encodage du départ.

Il y a un cas particulier : ISO 8859-1. Ce qui est un encodage assez
courant en France (bien qu'on lui préfère 8859-15 aujourd'hui, à cause
de l'Euro). Dans ce cas, et dans ce cas seulement, il suffit de
convertir le char en unsigned char (en ensuite en int32_t ou uint32_t)
pour avoir le caractère Unicode.

On trouvera des tables de conversion pour beaucoup d'encodages, ainsi
que beaucoup d'autre information, au site Unicode :
http://www.unicode.org. (http://www.unicode.or/Public/MAPPINGS pour les
tables de transcodage.) Le format de ces tables a été conçu exprès pour
faciliter leur utilisation par un programme -- pour générer la partie
données de ton tableau, par exemple, quelque chose du genre :

sed 's/#.*//' 8859-15.TEX |
awk 'BEGIN { print "int32_t iso8859_15_to_Unicode[] = {" }
$NF == 2 { print $2"," }
END { print "};" }'

suffira. (Mais on pourrait préférer quelque chose un peu plus complex,
avec vérification d'erreur, etc. Dans mon cas, la forme d'Unicode qui
m'intéresse est UTF-8, le tableau est donc un peu plus compliqué, et
j'ai écrit un petit programme en C++ pour le générer -- les valeurs hex
ne sont pas le point fort d'AWK.)

--
James Kanze
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France +33 (0)1 30 23 00 34