 |
C++Talk.NET C++ language newsgroups
|
| View previous topic :: View next topic |
| Author |
Message |
Guest
|
Posted: Fri Apr 14, 2006 3:06 pm Post subject: Code unicode dans un char* |
|
|
Bonjour a tous
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.
é=233, A=65, 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.... |
|
| Back to top |
|
 |
James Kanze Guest
|
Posted: Fri Apr 14, 2006 5:06 pm Post subject: Re: Code unicode dans un char* |
|
|
| Quote: | 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.
é=233, A=65, 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 kanze.james (AT) neuf (DOT) fr
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 |
|
| Back to top |
|
 |
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
|