CHARSETS(4)        Manuel du programmeur Linux        CHARSETS(4)


NOM
       charsets - Jeux de caractères et internationalisation pour
       les programmeurs.

DESCRIPTION
       Linux  est  un   système   d'exploitation   international.
       Plusieurs  de  ses  utilitaires et de ses gestionnaires de
       périphériques (y compris le gestionnaire de console)  sup­
       portent  les jeux de caractères multilingues contenant les
       lettres de  l'alphabet  Latin  avec  des  accents  et  des
       liaisons,  et  des  alphabets  non-Latin complets comme le
       Grec, le Cyrillique, l'Arabe ou l'Hébreu.

       Cette page de manuel présente le point de vue du  program­
       meur sur les différents jeux de caractères, et comment ils
       s'organisent sous Linux. Les standards présentés  compren­
       nent l'ASCII, l'ISO 8859, le KOI8-R, l'Unicode, l'ISO 2022
       et l'ISO 4873.


ASCII
       L'ASCII (American Standard Code For  Information)  est  le
       jeu  de  caractères  7-bits original, prévu pour l'anglais
       (américain).  Il est décrit actuellement dans le  standard
       ECMA-6.

       Une variante ASCII remplaçant le symbole americain "dièse"
       par le symbole anglais "livre  sterling"  est  utilisé  en
       Grande  Bretagne.  Si  besoin,  on identifie les variantes
       américaines et britanniques en utilisant les termes "ASCII
       US" et "ASCII UK".

       Comme  Linux  est  écrit  sur  du  matériel conçu pour les
       Etats-Unis, il supporte l'ASCII US de manière native.


ISO 8859
       L'ISO 8859 est une série de 10 jeux de caractères 8  bits,
       contenant  l'ASCII  US dans leur première moitie (7 bits),
       des caractères de contrôle non-imprimables entre les posi­
       tions  128  et  159,  et 96 symboles graphiques de largeur
       fixe aux emplacements 160 à 255.

       De tous ces jeux, le plus important ([NDT] notamment  pour
       nous  !)  est  l'ISO 8859-1 (Latin-1).  Il est supporte de
       manière native par le gestionnaire de console Linux, assez
       bien  supporté par X11R6, et c'est le jeu de caractères de
       base pour l'HTML.

       Le support console des autres jeux de caractères 8859  est
       disponible  sous  Linux,  à  travers des utilitaires comme
       setfont(8), qui modifient la correspondance des touches du
       clavier,  la table graphique EGA, et utilisent une projec­
       tion personnalisée de la table de fonte du gestionnaire de



Linux                   15 Septembre 1998                       1





CHARSETS(4)        Manuel du programmeur Linux        CHARSETS(4)


       console.

       Voici une brève description des jeux de caractères 8859 :

       8859-1 (Latin-1)
              Le  Latin-1  couvre la plupart des langues d'Europe
              de   l'Ouest,   comme    l'Albanais,    l'Allemand,
              l'Anglais,  le  Catalan,  le Danois, l'Espagnol, le
              Faroese [NDT ???], le Finnois, le Français, le Gal­
              lois,   le  Hollandais,  l'Irlandais,  l'Islandais,
              l'Italien,  le  Norvégien,  le  Portugais   et   le
              Suédois.  Le  manque de liaison entre les "ij" hol­
              landais, entre les "oe" français, et l'absence  des
              anciens guillemets ,,Allemands`` est tolérable.

       8859-2 (Latin-2)
              Le  Latin-2  contient la plupart des langues slaves
              d'Europe de  l'Est  utilisant  l'alphabet  Latin  :
              Allemand, Croate, Hongrois, Polonais, Roumain, Slo­
              vaque, Slovénien, et Tchèque.

       8859-3 (Latin-3)
              Le   Latin-3  est  utilise  pour  les   textes   en
              Esperanto, Galois, Maltais, et Turc.

       8859-4 (Latin-4)
              Le Latin-4 introduit des lettres pour l'Estonien et
              le Lithuanien. Il est  presque  obsolète,  remplacé
              par 8859-10 (Latin-6).

       8859-5 L'alphabet   ciryllique  est  utilisé  en  Bulgare,
              Biélorusse, Macedonien, Russe, Serbe et  Ukrainien.
              Les  ukrainiens  prononcent la lettre `ghe' fermée,
              comme `heh' et aurait besoin d'un accent pour  dis­
              tinguer  le  `ghe' correct. Voir les remarques con­
              cernant le KOI8-R ci-dessous.

       8859-6 Supporte l'Arabe. La table 8859-6 est une fonte  de
              caractères  de  largeurs  fixes,  mais un affichage
              correct doit  combiner  les  lettres  en  utilisant
              leurs formes initiale, centrale et finale.

       8859-7 Supporte le grec moderne.

       8859-8 Supporte l'Hébreu.

       8859-9 (Latin-5)
              Il  s'agit  d'une  variante du Latin-1 qui remplace
              les lettres Islandaises rarement utilisées par  des
              lettres Turques.

       8859-10 (Latin-6)
              Le   Latin  6  ajoute  les  dernières lettres Inuit
              (Groenland) et Sami (Lappon) qui manquaient dans le



Linux                   15 Septembre 1998                       2





CHARSETS(4)        Manuel du programmeur Linux        CHARSETS(4)


              Latin  4  pour  couvrir toute la zone nordique.  La
              RFC  1345  indique  un  latin  6  plus  ancien   et
              différent.   Le  Sami  nécessite  en  réalite  plus
              d'accents que ceux proposés.

KOI8-R
       Le KOI8-R est un jeu de caractères non-ISO très répandu en
       Russie.   La  première  moitié correspond a l'ASCII US, la
       seconde est un jeu de caractère cyrillique  un  peu  mieux
       conçu que l'ISO 8859-5.

       Le  support console du KOI8-R est disponible sous Linux, à
       travers des utilitaires comme setfont(8), qui modifient la
       correspondance  des touches du clavier, la table graphique
       EGA, et utilisent une projection personnalisée de la table
       de fonte du gestionnaire de console.

UNICODE
       L'Unicode  (ISO 10646) est un standard destiné à représen­
       ter sans ambiguïté tous les signes écrits  de  toutes  les
       langues  humaines  connues.   L'encodage natif Unicode est
       sur 32 bits (des versions plus anciennes  étaient  sur  16
       bits). Des informations supplémentaires sur l'Unicode sont
       disponibles sur <http://www.unicode.com>.

       Linux représente l'Unicode en utilisant le format de tran­
       fert  sur 8 bits (UTF-8). L'UTF-8 est un codage à longueur
       variable.  Il utilise un octet pour coder 7 bits, 2 octets
       pour  11  bits,  3  octets  pour 16 bits, 4 octets pour 21
       bits, 5 octets pour 26 bits, 6 octets pour 31 bits.

       Représentons par 0,1,x des bits à 0, a 1,  ou  quelconque.
       Un octet 0xxxxxxx correspond à l'Unicode 00000000 0xxxxxxx
       qui indique le même symbole que l'ASCII 0xxxxxxx.   Ainsi,
       ASCII  n'est  pas modifié par UTF-8, et les gens utilisant
       uniquement l'ASCII ne remarqueront aucun changement  :  ni
       dans le codage, ni dans les tailles de fichiers.

       Un  octet  110xxxxx  représente  le  début  d'un  code sur
       2-octets  code,  et  110xxxxx  10yyyyyy  est  assemblé  en
       00000xxx  xxyyyyyy.  Un octet 1110xxxx correspond au début
       d'un code sur 3 octets, et 1110xxxx 10yyyyyy 10zzzzzz sont
       assemblés   en  xxxxyyyy  yyzzzzzz.   (Quand  l'UTF-8  est
       utilisé pour coder les 31 bits de l'ISO 10646  cette  pro­
       gression continue jusqu'à des codes sur 6 octets.)

       Pour  les  utilisateurs de l'ISO-8859-1, ceci signifie que
       les caractères avec le bit de poids fort à 1  sont  désor­
       mais  codés  sur  deux  octets.  Ceci  tend à allonger les
       fichiers de texte ordinaires de 1 a  2  pour  cent  ([NDT]
       Dans  quel  langue  ? Il y a plus d'un à deux pour cent de
       caractères accentués en français  !).  Il  n'y  a  pas  de
       problèmes  de  conversion néanmoins, car les symboles Uni­
       code correspondant aux  caractères  ISO-8859-1  conservent



Linux                   15 Septembre 1998                       3





CHARSETS(4)        Manuel du programmeur Linux        CHARSETS(4)


       les  mêmes  valeurs (étendues avec 8 bits à zéro en tete).
       Pour les utilisateurs  japonais,  ceci  signifie  que  les
       codes  sur 16 bits courrament employés prendront désormais
       3 octets, et que les tables de  transcodage  devront  être
       étendues.  D'ailleurs  de  nombreux  japonais préfèrent le
       standard ISO 2022.

       Remarquez que l'UTF-8  se  synchronise  automatiquement  :
       10xxxxxx  est  le corps ou la fin d'un code, et tout autre
       octet est un début  de  code.   Notez  également  que  les
       octets ASCII dans un flux UTF-8 ne peuvent que représenter
       les caractères ASCII correspondants. En particulier il n'y
       a  pas  de  caractères NULs ou '/' pour introduire un code
       étendu.

       Comme l'ASCII, et en particulier NUL et '/', ne  sont  pas
       modifiés,  le  noyau  ne  remarque  pas  que  l'UTF-8  est
       utilisé. Il n'a pas à se préoccuper  de  la  signification
       des octets qu'il manipule.

       La  gestion  des  flux de données Unicode est généralement
       effectuée à travers des tables de "sous-fontes" correspon­
       dant   à  un  sous-ensemble  des  caractères  Unicode.  En
       interne, le noyau utilise l'Unicode pour décrire les sous-
       fontes  chargées  en mémoire vidéo. Ce signifie qu'en mode
       UTF-8, on peut utiliser le jeu de caractères japonais avec
       512 symboles différents. Ce n'est pas assez pour le Japon­
       ais, le Chinois ou  le  Coréen,  mais  c'est  generalement
       suffisant pour toutes les autres utilisations.


ISO 2022 et ISO 4873
       Les  standards  ISO  2022  et  4873 décrivent un modèle de
       contrôle des fontes basé sur le fonctionnement  du  VT100.
       Ce  modèle est (partiellement) supporté par le noyau Linux
       et xterm(1).  Il est assez populaire au Japon et en Corée.

       Il  existe 4 jeux de caractères graphiques, nommés G0, G1,
       G2 et G3, l'un d'entre eux est utilisé comme jeu  de  car­
       actères  en cours pour les codes avec le bit de poids fort
       à 0 (par défaut G0), et un  autre  est  utilisé  pour  les
       codes  avec  le  bit  de poids fort à 1 (initialement G1).
       Chaque ensemble dispose de 94 ou  96  caractères,  et  est
       constitué de caractères sur 7 bits. Ce modèle utilise soit
       les codes 040-0177 (041-0176)  soit  les  codes  0240-0377
       (0241-0376).  G0 a toujours une taille de 94 caractères et
       utilise les codes 041-0176.

       Le basculement entre les jeux de caractères est effectué à
       travers  les séquences ^N (SO ou LS1), ^O (SI ou LS0), ESC
       n (LS2), ESC o (LS3), ESC N (SS2),  ESC  O  (SS3),  ESC  ~
       (LS1R),  ESC  }  (LS2R),  ESC  |  (LS3R).  La fonction LSn
       réclame le jeu Gn pour les codes dont le bit de poids fort
       est  à  zéro.   La  fonction Sn demande le jeu Gn pour les



Linux                   15 Septembre 1998                       4





CHARSETS(4)        Manuel du programmeur Linux        CHARSETS(4)


       codes dont le bit de poids fort est à un.  La fonction SSn
       réclame  le  jeu  Gn  (n=2 ou 3) pour le caractère suivant
       uniquement (quelque soit la valeur du bit de poids  fort).

       Un  jeu  de 94 caractères est désigné comme jeu Gn par une
       séquence ESC ( xx (pour G0), ESC ) xx (pour G1), ESC *  xx
       (pour  G2),  ESC  + xx (pour G3), où xx est un symbole, ou
       une paire de symboles du standard ISO  2375  International
       Register  of  Coded  Character Sets.  Par exemple, ESC ( @
       sélectionne le jeu ISO 646 en tant que G0, ESC ( A  selec­
       tionné  le  jeu  standard  UK (avec la livre sterling à la
       place du dièse), ESC ( B  sélectionne  l'ASCII,  ESC  (  M
       sélectionne  un  jeu  de  caractères  Africains, ESC ( ! A
       sélectionne les caractères Cubains, etc...

       Un jeu de 96 caractères est désigné comme jeu Gn  par  une
       séquence  ESC  - xx (pour G1), ESC . xx (pour G2) ou ESC /
       xx (pour G3).  Par exemple, ESC - G sélectionne l'alphabet
       Hebreu comme G1.

       Un jeu de caractères multi-octets est désigné comme jeu Gn
       par une séquence ESC $ xx ou ESC $ ( xx (pour G0), ESC $ )
       xx  (pour G1), ESC $ * xx (pour G2), ESC $ + xx (pour G3).
       Par exemple, ESC $ ( C sélectionne les caractères  Coréens
       pour le jeu G0.  Le jeu de caractères Japonais sélectionné
       par ESC $ B dispose  d'une  version  plus  récente  sélec­
       tionnée par ESC & @ ESC $ B.

       L'ISO  4873  réclame  une  utilisation précise des jeux de
       caractères, dans laquelle G0 est fixé (toujours  l'ASCII),
       ainsi  seuls  G1,  G2 et G3 peuvent être invoqués pour les
       codes avec un bit de poids fort à 1.  En  particulier,  ^N
       et  ^O ne sont plus utilisés, ESC ( xx peut seulement être
       utilisé avec xx=B, et ESC ) xx, ESC * xx, ESC  +  xx  sont
       équivalents  à  ESC  - xx, ESC . xx, ESC / xx, respective­
       ment.


VOIR AUSSI
       console(4), console_ioctl(4), console_codes(4),  ascii(7),
       iso_8859_1(7), unicode(7), utf-8(7).



TRADUCTION
       Christophe Blaess, 1997.











Linux                   15 Septembre 1998                       5