Archive Liste Typographie
Message : Spécifications d'UTF-8 en français

(Alain LaBonté ) - Mercredi 04 Mars 1998
Navigation par date [ Précédent    Index    Suivant ]
Navigation par sujet [ Précédent    Index    Suivant ]

Subject:    Spécifications d'UTF-8 en français
Date:    Tue, 03 Mar 1998 17:29:10 -0500
From:    Alain LaBonté  <alb@xxxxxxxxxxxxxx>

A 20:09 98-03-03 GMT, Hugues RICHARD a écrit :
>>>>
A propos d'UTF-8, est-il modal comme l'ISO-2022-JP (encodage japonais JIS) ou bien déduit-on la longueur d'encodage du caractère en lisant le premier octet (qui dans la majorité des cas se suffit à lui-même), comme "l'EUC packed" japonais ?

Hugues.



<<<<


[Alain] :
Il est relativement simple de déterminer le nombre d'octets d'une suite d'octets du format transformé UTF-8 en se limitant au premier octet.

Je vous cite une ébauche (datant du 5 mai 1996, il y a eu des corrections rédactionnelles depuis, mais le contenu technique est le même) de la version française de la norme du jeu universel de caractères (ISO/CEI 10646) retrouvée sur mon ordinateur grâce à mon Altavista perso, vous comprendrez aisément (excusez le mauvais copier-coller tiré d'un document Word sans le formatage approprié) :


>>>>
P.2 Spécification
En UTF-8, les caractères de cette norme ont des représentations codées formées de suite de 1, 2, 3, 4, 5 ou 6 octets. Pour toutes les suites de plus d'un octet, l'octet initial détermine le nombre d'octets de la suite en ayant ce nombre de bits de poids élevé mis à 1, suivis d'un bit mis à 0. Par exemple une suite de 2 octets débute par les bits 110, et une suite de 6 octets par 1111110.
Le tableau suivant montre le format du premier octet codant un caractère, les bits disponibles pour coder le caractères étant représentés par un x.
Octets Binaire Bits libres UCS-4 max.
1er de 1 0xxxxxxx 7 0000 007F
1er de 2 110xxxxx 5 0000 07FF
1er de 3 1110xxxx 4 0000 FFFF
1er de 4 11110xxx 3 001F FFFF
1er de 5 111110xx 2 03FF FFFF
1er de 6 1111110x 1 7FFF FFFF
2ème ... nème 10xxxxxx 6
Les représentations codées de 0000 D800 à 0000 DFFF seront exclues de cette conversion. Ainsi, tout octet UTF-8 débutant par 0 binaire est une suite de 1 ; tout octet débutant par 10 est une continuation d'une suite multi-octets ; tout autre octet est le premier d'une suite multi-octets UTF-8.
Note - la transformation UTF-8 distribue les bits UCS-4 dans la suite appropriée ci-dessus. L'algorithme peut-être expliqué de façon assez simple :
· Pour convertir de l'UCS-4 à l'UTF-8, déterminez le nombre d'octets à utiliser en repérant la valeur UCS-4 maximale appropriée dans le tableau ci-dessus. Distribuez les bits de la représentation UCS-4 parmi les bits xxxx, en commençant par les bits de poids faible du dernier octet de la suite.
· Pour convertir d'UTF-8 à l'UCS-4, accollez tous les bits xxxx de la suite, les bits du dernier octet allant aux bits de poids faible du résultat. Tout bit de poids fort non-représenté vaudra zéro.
La définition formelle de la conversion entre UTF-8 et UCS-4 est présentée ci-après.
Exemple 1 (binaire)
UCS-4 UTF-8
00000000 00000000 00000000 00000001; 00000001;
00000000 00000000 00000000 01111111; 01111111;
00000000 00000000 00000000 10000000; 11000010; 10000000;
00000000 00000000 00000111 11111111; 11011111; 10111111;
00000000 00000000 00001000 00000000; 11100000; 10100000; 10000000;
00000000 00000000 11111111 11111111; 11101111; 10111111; 10111111;
00000000 00000001 00000000 00000000; 11110000; 10010000; 10000000; 10000000;
00000000 00011111 11111111 11111111; 11110111; 10111111; 10111111; 10111111;
00000000 00100000 00000000 00000000; 11111000; 10001000; 10000000; 10000000; 10000000;
00000011 11111111 11111111 11111111; 11111011; 10111111; 10111111; 10111111; 10111111;
00000100 00000000 00000000 00000000; 11111100; 10000100; 10000000; 10000000; 10000000; 10000000;
01111111 11111111 11111111 11111111; 11111101; 10111111; 10111111; 10111111; 10111111; 10111111;

Exemple 2 (hex)
UCS-4 UTF-16 UTF-8
0000 0001; 0001; 01;
0000 007F; 007F; 7F;
0000 0080; 0080; C2; 80;
0000 07FF; 07FF; DF; BF;
0000 0800; 0800; E0; A0; 80;
0000 FFFF; FFFF; EF; BF; BF;
0001 0000; D800; DC00; F0; 90; 80; 80;
0010 FFFF; D8FF; DFFF; F4; 8F; BF; BF;
001F FFFF; FFFD; F7; BF; BF; BF;
0200 0000; FFFD; F8; 88; 80; 80; 80;
03FF FFFF; FFFD; FB; BF; BF; BF; BF;
0400 0000; FFFD; FC; 84; 80; 80; 80; 80;
7FFF FFFF; FFFD; FD; BF; BF; BF; BF; BF;

<<<<


Alain LaBonté
en mission à Hull (Québec)

cc Liste TYPO