Page suivante Page pr�c�dente Table des mati�res

1. Introduction

1.1 Pourquoi Unicode ?

Les gens de diff�rents pays utilisent diff�rents caract�res pour repr�senter les mots de leur langue natale. De nos jours la plupart des applications, y compris les logiciels de courrier �lectronique et les navigateurs, traitent correctement les caract�res 8-bits. Ils peuvent donc traiter et afficher du texte correctement � condition qu'il soit repr�sent� dans un jeu de caract�res 8-bits, comme ISO-8859-1.

Il y a bien plus de 256 caract�res dans le monde - pensez au cyrillique, � l'h�breu, � l'arabe, au chinois, au japonais au cor�en et au tha� -, et de temps � autres, de nouveaux caract�res sont invent�s. Les probl�mes que cela induit pour les utilisateurs sont les suivants  :

La solution � ce probl�me est l'adoption d'un jeu de caract�res universel. Ce jeu de caract�res est Unicode http://www.unicode.org/. Pour plus d'informations sur Unicode, faites man 7 unicode (page de man contenue dans le package lpdman-1.20).

1.2 Les encodages d'Unicode

Cela r�duit le probl�me de l'utilisateur (devoir jongler entre diff�rents jeux de caract�res) � un probl�me technique : comment transporter les caract�res Unicode en utilisant des octets de 8 bits ? L'unit� de 8 bits est la plus petite unit� adressable de la plupart des ordinateurs et c'est aussi l'unit� utilis�e par les connexions r�seau TCP/IP. Cependant, l'utilisation d'un octet pour la repr�sentation d'un caract�re est un accident de l'histoire d� au fait que le d�veloppement de l'ordinateur commen�a en Europe et aux �tats-Unis, o� l'on pensait que 96 caract�res seraient suffisants pour longtemps.

Il y a fondamentalement quatre fa�ons d'encoder des caract�res Unicode dans des octets :

UTF-8

128 caract�res sont encod�s en utilisant 1 octet : les caract�res ASCII.
1920 caract�res sont encod� en utilisant deux octets : le latin, le grec, le cyrillique, le copte, l'arm�nien, l'h�breu, les caract�res arabes.
63488 caract�res sont encod�s en utilisant 3 octets, le chinois et le japonais entre autres.
Les 2147418112 caract�res restant (non encore assign�s) peuvent �tre encod�s en utilisant 4, 5 ou 6 caract�res. Pour plus d'informations sur UTF-8, faites man 7 utf-8 (cette page est contenue dans le package ldpman-1.20).

UCS-2

Chaque caract�re est repr�sent� par deux octets. Cet encodage peut repr�senter seulement les 65536 premiers caract�res d'Unicode.

UTF-16

C'est une extension d'UTF-2 qui peut repr�senter 11144112 caract�res Unicode. Les 65536 premiers caract�res sont repr�sent�s par deux octets, les autres par quatre.

UCS-4

Chaque caract�re est repr�sent� par 4 octets.

L'espace n�cessaire pour encoder un texte, comparativement aux encodages actuellement en usage (8 bits par caract�res pour les langues europ�ennes, plus pour le chinois/japonais/cor�en), est le suivant : (Cela a une influence sur l'espace disque, et la vitesse des communications r�seau.

UTF-8

Pas de changement pour l'ASCII am�ricain, juste quelques pourcents suppl�mentaires pour ISO-8859-1, 50 % de plus pour le chinois/japonais/cor�en, 100 % de plus pour le grec et le cyrillique.

UCS-2 et UTF-16

Pas de changement pour le chinois/japonais/cor�en, augmentation de 100 % pour l'US ASCII et ISO-8859-1, le grec et le cyrillique.

UCS-4

Augmentation de 100% pour le chinois/japonais/cor�en. De 300% pour l'US ASCII et ISO-8859-1, le grec et le cyrillique.

�tant donn� la p�nalit� pour les documents am�ricains et europ�ens, caus�e par UCS-2, UTF-8 et UCS-4, il semble peu probable que ces encodages aient un potentiel pour une utilisation � grande �chelle. L'API Win32 Microsoft supporte l'encodage UCS-2 depuis 1995 (au moins), cependant cet encodage n'a pas �t� largement adopt� pour les documents -SJIS demeure pr�dominant au Japon.

D'un autre c�t� UTF-8 a le potentiel pour une utilisation � large �chelle, puisqu'il ne p�nalise pas les utilisateurs am�ricains et europ�ens, et que beaucoup de logiciels de "traitement de texte" (NDT : au sens large) n'ont pas besoin d'�tre chang�s pour supporter UTF-8.
Nous allons maintenant expliquer comment configurer votre syst�me Linux pour qu'il utilise UTF-8 comme encodage de texte.

Notes pour les d�veloppeurs C/C++

L'approche de Microsoft Win32 rend facile pour les d�veloppeurs la production de versions Unicode de leurs programmes : Vous d�finissez Unicode ("#define UNICODE") au d�but de votre programme, et changez alors un grand nombre d'occurrences de char en TCHAR jusqu'� ce que votre programme compile sans Warnings. Le probl�mes est que vous avez au final deux versions de votre programme : une qui comprend le texte UCS-2 mais pas les encodages 8-bit, et une autre qui ne comprend que les vieux encodages 8-bit.

En plus, il y a une complication qui affecte UCS-2 et UCS-4 : l'ordre de la repr�sentation interne des nombre (``the endianness''). Le registre de syst�mes de codage de caract�res de la IANA dit � l'�gard de ISO-10646-UCS-2 : "il faut sp�cifier l'ordre de la repr�sentation interne des nombres � l'int�rieur du r�seau, le standard ne le sp�cifie pas". Cette repr�sentation est "big endian" en contexte r�seau, alors que Microsoft recommande dans ses outils de d�veloppement C/C++ d'utiliser une repr�sention d�pendante de la machine (c.a.d. "little endian" sur les processeurs ix86), et d'ajouter une marque de polarit� (BOM) au d�but du document, ou d'utiliser des heuristiques bas�es sur la statistique.

D'un autre c�t� l'approche de UTF-8 garde char* comme type standard pour le stockage des cha�nes en C. Il en r�sulte que votre programme supportera l'US ASCII, ind�pendamment de toute variable d'environnement, et supportera les textes encod�s en ISO-8859-1 et UTF-8 � condition que la variable d'environnement LANG soit positionn�e en cons�quence.

1.3 Liens

La liste de ressources de Markus Kuhn (mise � jour tr�s r�guli�rement) :

Un survol d'Unicode, UTF-8 et des programmes fonctionnant avec UTF-8 de Roman Czyborra :
http://czyborra.com/utf/#UTF-8

Des exemples de fichiers UTF-8 :


Page suivante Page pr�c�dente Table des mati�res

Hosting by: Hurra Communications GmbH
Generated: 2007-01-26 18:01:25