UTF-8(7)

NOM
UTF-8 - Un encodage Unicode multi-octet compatible ASCII.

DESCRIPTION
Le jeu de caracteres Unicode (voir unicode(7)) est constitue d'un codage sur 16 bits. L'encodage Unicode le plus evident (connu sous le nom de UCS-2) consiste en une sequence de mots de 16 bits. De telles chaines peuvent contenir, comme fragments de caractere 16 bits, des octets comme '\0' or '/' qui ont une signification particuliere dans les noms de fichiers, et les parametres de fonctions de bibliotheque C. De plus la majorite des outils UNIX attendent des fichiers ASCII et ne peuvent pas lire des caracteres representes par des mots de 16 bits sans subir des modifications majeures. Pour ces raisons, l'UCS-2 n'est pas un encodage externe de l'Unicode utilisable dans les noms de fichiers, les variables d'environnement, les fichiers textes, etc... Le sur-ensemble d'Unicode ISO 10646 Universal Character Set (UCS), occupe meme un espace de codage sur 31 bits, et l'encodage evident UCS-4 (une sequence de mots sur 32 bits) a les memes inconvenients. L'encodage UTF-8 de l'Unicode et de l'UCS n'a pas ces inconvenients et est un moyen d'utiliser le jeu de caracteres Unicode sous les systemes d'exploitation compatibles UNIX.

PROPRIETES.
l'encodage UTF-8 a les proprietes suivantes :

*   Les caracteres UCS 0x00000000 a 0x0000007f (le jeu US-ASCII classique) sont encodes simplement par les octets 0x00 a 0x7f (compatibilite ASCII) Ceci signifie que les fichiers et les chaines qui contiennent uniquement des caracteres du jeu ASCII 7 bits ont exactement le meme codage en ASCII et en UTF-8.

*   Tous les caracteres UCS superieurs a 0x7F sont encodes en sequences consistant uniquement en octets dans l'intervalle 0x80 a 0xFD, ainsi aucun octet ASCII n'apparait en tant que partie d'un autre caractere (plus de problemes avec '\0' ou '/').

*   L'ordre de tri lexicographique des chaines UCS-4 est preserve.

*   Tous les 2^31 caracteres de l'UCS peuvent etre encodes en utilisant UTF-8.

*   Les octets 0xFE et 0xFF ne sont jamais utilises dans le codage UTF-8.

*   Le premier octet d'une sequence multi-octet representant un caractere UCS non-ASCII est toujours dans l'intervalle 0xC0 a 0xFD et indique la longueur de la sequence multi-octets. Tous les octets suivants de cette sequence sont dans l'intervalle 0x80 a 0xBF. Ceci permet une re-synchronisation aisee et permet un encodage robuste face aux octets manquants.

*   les caracteres UTF-8 codes en UCS peuvent avoir jusqu'a 6 octets de longs, neanmoins les caracteres Unicode ne peuvent avoir au plus que 3 octets de long. Comme Linux utilise uniquement le sous-ensemble Unicode 16 bits de l'UCS, sous Linux, UTF-8 les sequences multi-octets peuvent seulement avoir 1, 2 ou 3 octets de long.

ENCODAGE
Les sequences d'octets suivantes sont utilisees pour representer un caractere. Les sequences utilisees dependent du numero de code UCS du caractere :

0x00000000 - 0x0000007F:
    0xxxxxxx

0x00000080 - 0x000007FF:
    110xxxxx 10xxxxxx

0x00000800 - 0x0000FFFF:
    1110xxxx 10xxxxxx 10xxxxxx

0x00010000 - 0x001FFFFF:
    11110xxx 10xxxxxx 10xxxxxx 10xxxxxx

0x00200000 - 0x03FFFFFF:
    111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx

0x04000000 - 0x7FFFFFFF:
    1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx

Les positions de bits xxx sont remplies avec les bits du numero de code du caractere en representation binaire. Seule la plus petite sequence multi-octets permettant de representer un numero de code doit etre utilisee.

EXEMPLES
Le caractere Unicode 0xA9 = 1010 1001 (le symbole copyright) est encode en UTF-8 comme :

    11000010 10101001 = 0xC2 0xA9

et le caractere 0x2260 = 0010 0010 0110 0000 (Le symbole "non egal") est encode ainsi :

    11100010 10001001 10100000 = 0xE2 0x89 0xA0

STANDARDS
ISO 10646, Unicode 1.1, XPG4, Plan 9.

AUTEUR
Markus Kuhn <mskuhn@cip.informatik.uni-erlangen.de>

VOIR AUSSI
unicode(7)