
                                 HOWTO Unicode

Bruno Haible, <haible@clisp.cons.org>, traduction : Samuel Tribehou,
<samuel-tribehou@mail.cpod.fr>

   v 0.12, 19 Octobre 1999
     _________________________________________________________________

   _Ce document explique comment configurer votre systme Linux pour
   qu'il utilise l'encodage de texte UTF-8. Ce document est en cours
   d'laboration. Toutes les astuces, suggestions, patchs, URLs sont les
   bienvenus. NDT : Il a t convenu avec l'auteur que seule la prsente
   version de ce document serait traduite dans un premier temps, le
   contenu changeant pour l'instant trop souvent pour qu'une traduction
   suivie puisse tre ralise. Reportez vous au site du LDP pour obtenir
   la dernire version._
     _________________________________________________________________

1. Introduction

1.1 Pourquoi Unicode ?

   Les gens de diffrents pays utilisent diffrents caractres pour
   reprsenter 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 caractres 8-bits. Ils
   peuvent donc traiter et afficher du texte correctement  condition
   qu'il soit reprsent dans un jeu de caractres 8-bits, comme
   ISO-8859-1.

   Il y a bien plus de 256 caractres dans le monde - pensez au
   cyrillique,  l'hbreu,  l'arabe, au chinois, au japonais au coren
   et au tha -, et de temps  autres, de nouveaux caractres sont
   invents. Les problmes que cela induit pour les utilisateurs sont les
   suivants  :

     * Il est impossible de stocker du texte avec des jeux de caractres
       diffrents dans le mme document. Par exemple, je peux citer des
       journaux russes dans une publication allemande ou franaise si
       j'utilise TeX, xdvi et Postscript, mais je ne peux pas le faire
       avec du texte pur.
     * Tant que chaque document a son propre jeu de caractres, et que la
       reconnaissance des jeux de caractres n'est pas automatique,
       l'intervention manuelle de l'utilisateur est invitable. Par
       exemple, pour voir la page d'accueil de la distribution Linux
       XTeamLinux http://www.xteamlinux.com.cn/, je dois dire  Netscape
       que la page web est code en GB2312.
     * De nouveaux symboles comme l'Euro sont invents. ISO a publi un
       nouveau standard ISO-8859-15 qui est en gros identique 
       ISO-8859-1, except qu'il supprime des caractres rarement
       utiliss, comme le vieux symbole montaire, remplac par le signe
       Euro. Si les utilisateurs acceptent ce standard, ils auront des
       documents dans diffrents jeux de caractres sur leur disque, et
       cela deviendra une proccupation quotidienne. Mais les ordinateurs
       devraient simplifier le choses, pas les compliquer.

   La solution  ce problme est l'adoption d'un jeu de caractres
   universel. Ce jeu de caractres 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 rduit le problme de l'utilisateur (devoir jongler entre
   diffrents jeux de caractres)  un problme technique : comment
   transporter les caractres 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 utilise par les connexions
   rseau TCP/IP. Cependant, l'utilisation d'un octet pour la
   reprsentation d'un caractre est un accident de l'histoire d au fait
   que le dveloppement de l'ordinateur commena en Europe et aux
   tats-Unis, o l'on pensait que 96 caractres seraient suffisants pour
   longtemps.

   Il y a fondamentalement quatre faons d'encoder des caractres Unicode
   dans des octets :

   _UTF-8_
          128 caractres sont encods en utilisant 1 octet : les
          caractres ASCII.
          1920 caractres sont encod en utilisant deux octets : le
          latin, le grec, le cyrillique, le copte, l'armnien, l'hbreu,
          les caractres arabes.
          63488 caractres sont encods en utilisant 3 octets, le chinois
          et le japonais entre autres.
          Les 2147418112 caractres restant (non encore assigns) peuvent
          tre encods en utilisant 4, 5 ou 6 caractres. 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 caractre est reprsent par deux octets. Cet encodage
          peut reprsenter seulement les 65536 premiers caractres
          d'Unicode.

   _UTF-16_
          C'est une extension d'UTF-2 qui peut reprsenter 11144112
          caractres Unicode. Les 65536 premiers caractres sont
          reprsents par deux octets, les autres par quatre.

   _UCS-4_
          Chaque caractre est reprsent par 4 octets.

   L'espace ncessaire pour encoder un texte, comparativement aux
   encodages actuellement en usage (8 bits par caractres pour les
   langues europennes, plus pour le chinois/japonais/coren), est le
   suivant : (Cela a une influence sur l'espace disque, et la vitesse des
   communications rseau.

   _UTF-8_
          Pas de changement pour l'ASCII amricain, juste quelques
          pourcents supplmentaires pour ISO-8859-1, 50 % de plus pour le
          chinois/japonais/coren, 100 % de plus pour le grec et le
          cyrillique.

   _UCS-2 et UTF-16_
          Pas de changement pour le chinois/japonais/coren, 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/coren. De 300%
          pour l'US ASCII et ISO-8859-1, le grec et le cyrillique.

   tant donn la pnalit pour les documents amricains et europens,
   cause 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 prdominant au Japon.

   D'un autre ct UTF-8 a le potentiel pour une utilisation  large
   chelle, puisqu'il ne pnalise pas les utilisateurs amricains et
   europens, et que beaucoup de logiciels de "traitement de texte"
   (NDT : au sens large) n'ont pas besoin d'tre changs pour supporter
   UTF-8.
   Nous allons maintenant expliquer comment configurer votre systme
   Linux pour qu'il utilise UTF-8 comme encodage de texte.

  Notes pour les dveloppeurs C/C++

   L'approche de Microsoft Win32 rend facile pour les dveloppeurs la
   production de versions Unicode de leurs programmes : Vous dfinissez
   Unicode ("#define UNICODE") au dbut de votre programme, et changez
   alors un grand nombre d'occurrences de char en TCHAR jusqu' ce que
   votre programme compile sans Warnings. Le problmes 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 reprsentation interne des nombre (``the endianness''). Le
   registre de systmes de codage de caractres de la IANA dit  l'gard
   de ISO-10646-UCS-2 : "il faut spcifier l'ordre de la reprsentation
   interne des nombres  l'intrieur du rseau, le standard ne le
   spcifie pas". Cette reprsentation est "big endian" en contexte
   rseau, alors que Microsoft recommande dans ses outils de
   dveloppement C/C++ d'utiliser une reprsention dpendante de la
   machine (c.a.d. "little endian" sur les processeurs ix86), et
   d'ajouter une marque de polarit (BOM) au dbut du document, ou
   d'utiliser des heuristiques bases sur la statistique.

   D'un autre ct l'approche de UTF-8 garde char* comme type standard
   pour le stockage des chanes en C. Il en rsulte que votre programme
   supportera l'US ASCII, indpendamment de toute variable
   d'environnement, et supportera les textes encods en ISO-8859-1 et
   UTF-8  condition que la variable d'environnement LANG soit
   positionne en consquence.

1.3 Liens

   La liste de ressources de Markus Kuhn (mise  jour trs
   rgulirement) :
     * http://www.cl.cam.ac.uk/~mgk25/unicode.html
     * http://www.cl.cam.ac.uk/~mgk25/ucs-fonts.html

   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 :
     * Les fichiers quickbrown.txt, utf-8-test.txt, utf-8-demo.txt dans
       le rpertoire examples dans le package ucs-fonts de Markus Kuhn
       http://www.cl.cam.ac.uk/~mgk25/download/ucs-fonts.tar.gz
     * ftp://ftp.cs.su.oz.au/gary/x-utf8.html
     * Le fichier iso10646 dans le package trans-1.1.1 de Kosta Kosti
       ftp://ftp.nid.ru/pub/os/unix/misc/trans111.tar.gz
     * ftp://ftp.dante.de/pub/tex/info/lwc/apc/utf8.html
     * http://www.cogsci.ed.ac.uk/~richard/unicode-sample.html

2. Configuration de l'affichage

   Nous supposons que vous avez dj adapt votre console Linux et la
   configuration de X11  votre clavier et avez positionn correctement
   la variable de localisation LANG. Ceci est expliqu dans le
   Danish/International HOWTO, et dans les autres HOWTOS nationaux :
   Finish, French, German, Italian, Polish, Slovenian, Spanish, Cyrillic,
   Hebrew, Chinese, Thai, Esperanto. Mais, s'il vous plat, ne suivez pas
   le conseil donn dans le Thai-HOWTO vous disant de faire croire que
   vous utilisez des caractres ISO-8859-1 (U0000..U00FF) alors que vous
   tapez des caractres Thai (U0E01..U0E5B). Faire cela ne vous causera
   que des problmes lorsque vous passerez  Unicode.

2.1 La console Linux

   Je ne parle pas tellement de la console ici, parce que je ne l'utilise
   que pour rentrer mon login, password, et taper xinit sur les machines
   dpourvues de xdm.

   Mais revenons  nos moutons : le package kbd-0.99
   ftp://sunsite.unc.edu/pub/Linux/system/keyboards/kbd-0.99.tar.gz, et
   une version largement tendue, le package console-tools-0.2.2
   ftp://sunsite.unc.edu/pub/Linux/system/keyboards/console-tools-0.2.2.t
   ar.gz, contiennent dans le rpertoire kbd-0.99/src/ (ou
   console-tools-0.22/screenfonttools/) deux programmes : unicode_start
   et unicode_stop. Quand vous appelez unicode_start, la sortie de la
   console est interprte comme de l'UTF-8. De plus, le clavier est mis
   en mode Unicode (voir "man kbd_mode"). Dans ce mode, les caractres
   Unicode taps par Alt-x1...Alt-xn (o x1...xn sont les chiffres de
   pav numrique) seront mis en UTF-8. Si votre clavier, ou plus
   prcisment, votre keymap a des touches correspondant  des caractres
   non ASCII(comme le Umlaute allemand), que vous souhaiteriez pouvoir
   CapsLocker, vous devez appliquer au kernel le patch
   linux-2.2.9-keyboard.diff ou linux-2.3.12-keyboard.diff.

   Vous voudrez probablement afficher des caractres de diffrents
   alphabets sur le mme cran. Pour cela, vous aurez besoin d'une fonte
   Unicode pour la console.
   Le package
   ftp://sunsite.unc.edu/pub/Linux/system/keyboards/console-data-1999.08.
   29.tar.gz contient une fonte (LatArCyrHeb-{08,14,16,19}.psf), qui
   couvre les lettres pour le latin, le cyrillique, l'hbreu, et l'arabe.
   Il supporte les parties 1, 2, 3, 4, 5, 6, 8, 9, 10 d'ISO-8859  lui
   tout seul. Pour l'installer, copiez le dans
   /usr/lib/kbd/consolefonts/, et excutez
   /usr/bin/setfont /usr/lib/kbd/consolefonts/LatArCyrHeb-14.psf.

   Si vous voulez que le copier-coller marche avec les consoles UTF-8,
   vous aurez besoin du patch linux-2.3.12-console.diff d'Edmund Thomas,
   Grimley Evans et Stanislav Voronyi.

2.2 Fontes trangres pour X11

   N'hsitez pas  installer des fontes cyrilliques, chinoises,
   japonaises, etc. Mme si ce ne sont pas des fontes Unicodes, elles
   aideront  afficher des documents Unicode : au moins Netscape
   Communicator 4 et Java feront usage des fontes trangres si elles
   sont disponibles.

   Les programmes suivants sont utiles pour installer des fontes :
     * "mkfontdir rpertoire" prpare un rpertoire de fontes utilisables
       par le serveur X. Il doit tre excut aprs avoir install les
       fontes dans un rpertoire.
     * "xset fp+ rpertoire" ajoute un rpertoire au chemin de fontes
       actuel du serveur X. Pour que ce soit permanent, ajoutez une ligne
       "FontPath"  votre fichier /etc/XF86Config, dans la section
       "Files".
     * "xset fp rehash" doit tre excut aprs avoir appel mkfontdir
       sur un rpertoire qui est dj contenu dans le chemin de fontes
       actuel du serveur X.
     * "xfontsel" vous permet de parcourir les fontes installes en
       filtrant selon les diverses proprits des fontes.
     * "xlsfonts -fn motif-de-recherche" liste toutes les fontes qui
       correspondent  un motif de recherche. Il affiche aussi diverses
       proprits des fontes. En particulier, "xlsfonts -ll -fn fonte"
       liste les proprits de la fonte CHARSET_REGISTRY et
       CHARSET_ENCODING, qui ensemble dterminent l'encodage de la fonte.
     * "xfd -fn fonte" affiche une fonte page par page.

   Les fontes suivantes sont disponibles gratuitement (liste non
   exhaustive) :

     * Celle contenues dans XFree86, quelquefois contenues dans un
       package spar. Par exemple, la SuSE a seulement les fontes 75 dpi
       normales dans le package "xf86" de base. Les autres fontes sont
       dans les packages "xfnt100", "xfntbig", "xfntcyr", "xfntscl".
     * Les fontes internationales pour Emacs,
       ftp://ftp.gnu.org/pub/gnu/intlfonts/intlfonts-1.1.tar.gz. Comme il
       a t mentionn prcdemment, elles sont utiles mme si vous
       prfrez XEmacs  GNU Emacs, ou mme si vous n'utilisez pas Emacs
       du tout.

2.3 Les fontes Unicode pour X11

   Les applications qui souhaitent pouvoir afficher du texte utilisant
   diffrentes alphabets (comme le cyrillique et le grec) en mme temps,
   peuvent le faire en utilisant les diffrentes fontes X pour chaque
   partie de texte. C'est ce que font Netscape Communicator et Java.
   Cependant, cette approche est plus complique, parce que au lieu de
   travailler avec "Font" et "XFontStruct", le programmeur devra utiliser
   "XFonSet", et aussi parce que toutes les fontes dans le jeu de fontes
   doivent avoir les mmes dimensions.

     * Markus Kuhn a assembl des fontes  largeur fixe (fixed width) de
       75 dpi avec Unicode couvrant le latin, le grec, le cyrillique,
       l'armnien, le gorgien, l'hbreu, et les critures symboliques.
       Elles couvrent les parties 1  10 et 13  15 de ISO-8859 en un
       seul jeu de fontes. Cette fonte est ncessaire pour utiliser un
       xterm en mode UTF-8.
       http://www.cl.cam.ac.uk/~mgk25/download/ucs-fonts.tar.gz
     * Roman Czyborra a assembl une fonte 8x16/16x16 75 dpi avec
       l'encodage Unicode couvrant une partie norme d'Unicode.
       Telchargez unifont.hex.gz et hex2bdf depuis
       http://czyborra.com/unifont/ Elle n'est pas  largeur fixe : 8
       pixels de large pour les caractres europens, 16 pour les
       caractres chinois. Instructions d'installation :

$ gunzip unifont.hex.gz
$ hex2bdf < unifont.hex > unifont.bdf
$ bdftopcf -o unifont.pcf unifont.bdf
$ gzip -9 unifont.pcf
$ cp unifont.pcf.gz /usr/X11R6/lib/X11/fonts/misc
$ cd usr/X11R6/lib/X11/fonts/misc
$ mkfontdir
$ xset fp rehash

     * Primoz Peterlin a assembl un famille de fontes ETL couvrant le
       latin, le grec, le cyrillique, l'armnien, le gorgien, et
       l'hbreu. ftp://ftp.x.org/contrib/fonts/etl-unicode.tar.gz.
       Utilisez le programme "bdftopcf" pour l'installer.

2.4 Unicode xterm

   xterm fait partie de X11R6 et XFree86, mais il est maintenu sparment
   par Tom Dickey.
   http://www.clark.net/pub/dickey/xterm/xterm.html. Les nouvelles
   versions (patch niveau 109 et plus) supportent la conversion des
   touches (keystrokes) en UTF-8 avant de les envoyer  l'application qui
   tourne dans le xterm, et l'affichage des caractres Unicode que
   l'application renvoie comme une squence d'octets UTF-8.

   Pour obtenir un xterm UTF-8 fonctionnel, vous devez :

     * Rapatrier http://www.clark.net/pub/dickey/xterm/xterm.tar.gz.
     * Le configurer en excutant "./configure -enable-wide-chars...",
       puis le compiler et l'installer.
     * Avoir une fonte Unicode  largeur fixe installe. ucs-fonts.tar.gz
       de Markus Kuhn (voir ci-dessus) est fait pour a.
     * Lancer "xterm -u8 -fn fixed". L'option "-u8" enclenche le support
       d'Unicode et d'UTF-8. La fonte "fixed" est celle de Markus Khun.
     * Jeter un oeil aux fichiers-exemples contenus dans le package
       ucs-fonts de Markus Khun :

$ cd .../ucs-fonts
$ cat quickbrown.txt
$ cat utf-8-demo.txt

       Vous devriez voir (entre autre) des caractres grecs et
       cyrilliques.
     * Pour configurer xterm pour qu'il utilise le support UTF-8 ds le
       lancement, ajoutez la ligne "XTerm*utf8:1"  votre
       $HOME/.Xdefaults (pour vous seul). Je ne recommande pas de changer
       directement /usr/X11R6/lib/X11/app-defauts/XTerm, parce que vos
       changements seront effacs lorsque vous installerez une nouvelle
       version de XFree86.
     * Si vous avez aussi chang le nom de la fonte, vous aurez besoin
       d'une ligne "*VT100*font: votre-fonte" dans votre fichier
       $HOME/.Xdefaults. Pour les fontes "fixes" ce n'est pas ncessaire,
       puisque "fixed" est la valeur par dfaut de toute faon.

2.5 Divers

   Un petit programme qui teste si une console Linux est en mode UTF-8
   peut tre trouv dans le package
   ftp://sunsite.unc.edu/pub/Linux/system/keyboards/x-lt-1.18.tar.gz de
   Ricardas Cepas. Ce sont les fichiers testUTF-8.c et testUTF8.c.

3. Configuration des locales

3.1 Les fichiers et le kernel

   Vous pouvez maintenant utiliser n'importe quel caractre Unicode dans
   les noms de fichiers. Ni le kernel ni aucun utilitaire systme ne
   ncessite de modifications. Ceci parce que les noms de fichiers dans
   le kernel peuvent tre n'importe quoi qui ne contient ni octet nul, ni
   '/' (utilis pour dlimiter les sous-rpertoires). Quand ils sont
   encods en utilisant UTF-8, les caractres non-ASCII ne seront jamais
   encods en utilisant un octet nul ou un slash. La seule consquence
   est que les noms de fichiers et de rpertoires occupent plus d'octets
   qu'ils ne contiennent de caractres. Par exemple, un nom de fichier
   contenant cinq caractres grecs apparatra pour le kernel comme un nom
   de fichier de 10 octets. Le kernel ne sait pas (et n'a pas besoin de
   savoir) que ces octets sont affichs en grec.

   C'est une thorie gnrale, qui est vraie tant que vos fichiers
   restent sur un systme Linux. Sur les systmes de fichiers utiliss
   depuis d'autres systmes d'exploitation, mount possde des options
   pour contrler la conversion des noms de fichiers de/vers UTF-8 :

     * Les systmes de fichiers "vfat" ont une option "utf8".
       Voir le fichier
       file:/usr/src/linux/Documentation/filesystems/vfat.txt. Quand vous
       donnez  mount une option "iocharset" diffrente de celle utilise
       par dfaut (qui est "iso8859-1"), les rsultats avec et sans
       l'option "utf8" ne sont pas cohrents. Par consquent, je ne
       conseille pas d'utiliser l'option "iocharset" de mount.
     * Les systmes de fichiers "msdos", "umsdos" ont la mme option de
       montage, mais il semble qu'elle n'ait pas d'effet.
     * Le systme de fichiers "iso9660" a une option de montage "utf8".
       Voir file:/usr/src/linux/Documentation/filesystems/isofs.txt
     *  partir des kernels Linux 2.2.x, le systme de fichier "ntfs" a
       une option de montage"utf8".
       Voir file:/usr/src/linux/Documentation/filesystems/ntfs.txt

   Les autres systmes de fichiers (nfs, smbfs, ncpfs, hpfs, etc.) ne
   convertissent pas les noms de fichiers. Par consquent ils accepteront
   les noms de fichier Unicode encods en UTF-8 seulement si l'autre
   systme d'exploitation les supporte. Rappelez vous que pour qu'une
   option de montage soit applique aux prochains montages, vous devez
   l'ajouter  la quatrime colonne de la ligne correspondante dans
   /etc/fstab.

3.2 Le kernel et les ttys

   Les ttys sont en quelque sorte des tubes bidirectionnels entre deux
   programmes, autorisant des choses comme la rptition (echoing) ou
   l'dition de la ligne de commande. Quand dans un xterm, vous excutez
   la commande "cat" sans arguments, vous pouvez entrer et diter autant
   de lignes que vous voulez, elles seront rptes en retour ligne par
   ligne. Les actions d'dition du kernel ne sont pas correctes, en
   particulier les touche Backspace et Tab ne seront pas traites
   correctement.

   Pour rsoudre ce problme, vous devez :

     * Appliquer le patch linux-2.0.35-tty.diff ou linux-2.2.9-tty.diff
       ou linux-2.3.12-tty.diff et recompiler votre kernel.
     * Si vous utilisez la glibc2, appliquer le patch glibc211-tty.diff
       et recompiler votre libc. Si vous n'tes pas aussi aventureux, il
       suffit de patcher une version dj installe avec le fichier
       inclus : glibc-tty.diff
     * Appliquer le patch stty.diff  GNU sh-utils-1.16b, et recompiler
       le programme stty. Testez le ensuite en utilisant stty -a et stty
       iutf8.
     * Ajouter la commande stty iutf8 au script unicode_start, et la
       commande stty -iutf8 au script unicode_stop.
     * Appliquer le patch xterm.diff  xterm-109, et recompiler "xterm",
       puis le tester en lanant xterm -u8 / xterm +u8 et en lanant stty
       -a et un cat interactif  l'intrieur.

   Pour que ce changement soit persistant mme  travers rlogin et
   telnet, vous devrez aussi :

     * Dfinir des nouvelles valeurs pour la variable d'environnement
       TERM, "linux-utf8" comme alias pour "linux", et "xterm-utf8" comme
       alias pour "xterm". Si vous avez la bibliothque ncurses sur votre
       systme et la base de donnes /usr/lib/terminfo (ou
       /usr/share/terminfo), faites cela en xecutant

$ tic linux-utf8 . terminfo
$ tic xterm-utfu . terminfo

       sur un compte utilisateur (cela crera les entres terminfo dans
       votre repertoir $HOME/.terminfo). Voil linux-utf8.terminfo et
       xterm-utf8.terminfo.
       Je ne recommande pas de lancer ces commandes en tant que root,
       parce que cela crera les entres terminfo dans /urs/lib/terminfo,
       o, elles seront probablement effaces lors de la prochaine mise 
       jour de votre systme. Si votre systme possde un fichier
       /etc/termcap, vous devriez aussi diter ce fichier : copiez les
       entres linux et xterm, et donnez leur les nouveaux noms
       "linux-utf8" et "xterm-utf8". Le fichier  termcap.diff contient un
       exemple.
     *  chaque fois que vous appelez "unicode_start" et "unicode_stop"
       depuis la console, excutez aussi "export TERM =linux-utf8", ou
       "export TERM=linux", respectivement.
     * Appliquer le patch xterm2.diff  xterm-0.9, recompiler "xterm", et
       et enlever toutes les lignes "XTerm*termName" des fichiers
       /usr/X11R6/lib/X11/app-defaults/XTerm et $HOME/.Xdefaults.
       Maintenant xterm donne  TERM la valeur "xterm-utf8" plutt que
       "xterm".
     * Appliquer les patches netkit.diff, netkitb.diffet telnet.diff puis
       recompiler "rlogind" et "telnetd". Maintenant rlogin et telnet
       mettent tty en mode d'dition UTF-8  chaque fois que la variable
       d'environnement TERM est "linux-ut8" ou "xterm-utf8".

3.3 Conversion de donnes gnrales

   Vous aurez besoin d'un programme pour convertir vos fichiers texte
   locaux (probablement ISO-8859-1) en UTF-8. L'alternative serait de
   continuer  utiliser des textes qui utilisent diffrents encodages sur
   la mme machine, mais ce n'est pas une bonne solution sur le long
   terme. Un de ces programmes est "iconv", qui est livr avec la
   glibc-2.1. Tapez simplement

icon --from-code=ISO-8859-1 --to-code=UTF-8 < vieux_fichier > nouveau_fichier

   Voici deux scripts shell trs pratiques, appels  "i2u" i2u.sh (pour
   conversion de ISO  UTF) et  "u2i" u2i.sh (pour conversion de UTF 
   ISO). [skip adapt..]

   Si vous n'avez pas la glibc-2.1 et iconv installs, vous pouvez
   utiliser GNU recode 3.5  la place. "i2u" i2u_recode.sh est "recode
   ISO-8859-1..UTF-8" "u2i" u2i_recode.sh est "recode UTF-8..ISO-8859-1".
   ftp://ftp.iro.umontreal.ca/pub/recode/recode-3.5.tar.gz
   ftp://ftp.gnu.org/pub/gnu/recode/recode-3.5.tar.gz
   Notes : vous devez utiliser GNU recode 3.5 ou plus. Pour compiler GNU
   recode sur des plateformes sans glibc-2 (c'est  dire sur toutes les
   plateformes sauf les systmes Linux rcents), vous devez le configurer
   avec "--disable-nls", autrement l'dition des liens chouera.

   Sinon, vous pouvez aussi utiliser CLISP  la place. Voici "i2u" et
   "u2i" en version lisp : i2u.lsp et u2i.lsp.
   Note : Vous devez avoir une version de CLISP qui date au plus de
   juillet 1999.
   ftp://clisp.cons.org/pub/lisp/clisp/source/clispsrc.tar.gz
   D'autres programmes de conversion de donnes existent, mais ils sont
   moins puissants que GNU recode. Ce sont
     * "trans"
       ftp://ftp.informatik.uni-erlangen.de/pub/doc/ISO/charsets/trans113
       .tar.gz
     * "tcs" qui vient du systme d'exploitation Plan9 :
       ftp://ftp.informatik.uni-erlangen.de/pub/doc/ISO/charsets/tcs.tar.
       gz
     * et "utrans/uhtrans/hutrans" par G.Adam Stanislav
       <adam@whizkidtech.net>
       ftp://ftp.cdrom.com/pub/FreeBSD/distfiles/i18ntools-1.0.tar.gz

3.4 Les variables d'environnement locales

   Vous pouvez avoir les variables d'environnement suivantes
   positionnes, contenant les noms de locales :

   _LANGUAGE_
          Remplacement pour LC_MESSAGES. Seulement utilis par GNU
          gettext.

   _LC_ALL_
          Remplacement pour toute les autres variables LC_* :

   _LC_CTYPE, LC_MESSAGES, LC_COLLATE, LC_NUMERIC, LC_MONETARY, LC_TIME_
          Ce sont des variables individuelles pour : le type des
          caractres et leur encodage, les messages en langue maternelle,
          les rgles de classement, le format des nombres, le format des
          montants montaires, l'affichage de la date et de l'heure.

   _LANG_
          Valeur par dfaut pour toutes les variables LC_*

   (Voir `man 7 locale' pour une description dtaille.)

   Chacune des variables LC_* et LANG peuvent contenir un nom de locale
   de la forme suivante :

     language[_territory[.codeset]][@modifier]

   O _language_ est un code de langue ISO 639 (en minuscules),
   _territory_ est un code de pays ISO 3166 (en majuscules), _codeset_
   dsigne une table de caractres, et _modifier_ d'autres attributs
   particuliers (par pour exemple indiquer un dialecte particulier d'une
   langue, ou une orthographe non standard).

   LANGUAGE peut contenir plusieurs noms de locale, spars par deux
   points (:).

   Pour dire  votre systme et  toutes les applications que vous
   utilisez UTF-8, vous devez ajouter un suffixe d'UTF-8  vos noms de
   locales. Par exemple, si vous utilisiez

LANGUAGE=de:fr:en
LC_CTYPE=de_DE

   vous le changeriez en

LANGUAGE=de.UTF-8:fr.UTF-8:en.UTF-8
LC_CTYPE=de_DE.UTF-8

3.5 Crer les fichiers pour le support des locales

   Si vous avez la glibc-2.1 ou glibc-2.1.1 ou glibc-2.1.2 installe,
   vrifiez d'abord en utilisant "localedef -help" que le rpertoire
   systme pour le tables de caractres est /usr/share/i18n/charmaps.
   Puis appliquez au fichier /usr/share/i18n/charmaps/UTF8 le patch
   glibc21.diff ou glibc211.diff ou glibc212.diff, respectivement. Puis
   crez les fichiers de support pour toute les locales UTF-8 que vous
   voulez utiliser, par exemple :

$ localedef -v -c -i de_DE -f UTF8 /usr/share/locale/de_DE.UTF-8

   Gnralement vous n'avez pas besoin de crer des variables appeles
   "de" ou "fr" sans suffixe pour le code du pays, parce que ces locales
   sont normalement utilises seulement par la variable LANGUAGE, et pas
   par les variables LC_*. De plus LANGUAGE est seulement utilis en
   remplacement de LC_MESSAGES.

3.6 Ajouter le support pour la bibliothque C

   La glibc-2.2 supportera les locales multi-octets (de plusieurs
   octets), en particulier les locales UTF-8 cres plus haut. Mais les
   glibc-2.1 et 2.1.1 ne la supportent pas rellement. Par consquent le
   seul effet rel de la cration des fichiers
   /usr/local/share/de_DE.UTF-8/* ci dessus est que setlocale(LC_ALL,"")
   retournera "de_DE.UTF-8", conformment  vos variables
   d'environnement, au lieu d'enlever le suffixe "UTF-8".

   Pour ajouter le support pour la locale UTF-8, vous devriez compiler et
   installer la bibliothque 'libutf8_plug.so', depuis
   libutf8-0.5.2.tar.gz. Puis vous pouvez positionner la variable
   d'environnement LD_PRELOAD pour qu'elle pointe sur la bibliothque
   installe :

export LD_PRELOAD=/usr/local/lib/libutf8_plug.so

   Alors, dans chaque programme lanc avec cette variable d'environnement
   positionne, les fonctions de libutf8_plug.so seront appeles  la
   place des originales dans /lib/libc.so.6. Pour plus d'informations sur
   LS_PRELOAD, voyez "man 8 ld.so".

   Tout cela ne sera plus ncessaire quand la glibc-2.2 sortira.

3.7 Conversion des catalogues de messages

   Maintenant ajoutons un contenu  ces nouvelles locales. Les commandes
   /bin/sh suivantes convertiront vos catalogues de messages au format
   UTF-8. Elles doivent tre lances en tant que root, et ncessitent les
   programmes 'msgfmt' et 'msgunfmt' de GNU gettext-0.10.35
   convert-msgcat.sh.
   Ceci non plus ne sera plus ncessaire une fois que la glibc-2.2 sera
   sortie, parce qu'alors la fonction gettext convertira les chanes de
   caractres de faon approprie depuis la table de caractres du
   traducteur vers la table de caractres de l'utilisateur, en utilisant
   soit iconv soit librecode.

4. Applications spcifiques.

4.1 Le rseau

  rlogin

   Marche bien avec les patches mentionns prcdemment.

  telnet

   Telnet n'est pas ne traite pas les caractres 8-bits (il n'est
   pas"8-bit-clean") par dfaut. Pour pouvoir envoyer des codes de
   touches Unicode  un hte distant, vous devez mettre telnet en mode
   "outbinary". Il y a deux faons de faire cela :

$ telnet -L <hote>

   et

$telnet
telnet> set outbinary
telnet> open <hote>

   en outre, utilisez les patches mentionns prcdemment.

4.2 Les navigateurs

  Netscape

   Netscape 4.05 ou plus peut afficher des documents HTML en encodage
   UTF-8. Tout ce qu'un document ncessite est la ligne suivante, situe
   entre les tags <head> et </head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

   Netscape 4.05 ou plus peut aussi afficher du HTML et du texte en
   encodage UCS-2 avec le [byte-order mark].
   http://www.netscape.com/computing/download/

  Lynx

   Lynx 2.8 a un cran d'options (touche 'O') qui permet de slectionner
   la table de caractres utilise  l'affichage. Quand il, tourne dans
   un xterm ou depuis une "Linux console" en mode UTF-8, slectionnez
   "UNICODE UTF-8".

   Maintenant, encore une fois, tout ce qu'un document ncessite est la
   ligne suivante, entre les tags <head> et </head> :

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

   Quand vous visualisez des fichiers texte encods en UTF-8, vous devez
   aussi passer  la ligne de commande l'option
   "-assume_local_charset=UTF-8" (affecte seulement les URLs de type
   file:/...) ou "-assume_charset=UTF-8" (affecte toute les URLs). Sinon,
   dans Lynx-2.2.8, vous pouvez, dans l'cran d'options, changer le jeu
   de caractres suppos par dfaut ("assumed document character set") en
   "utf-8".

   Il y a aussi, dans l'cran d'options, une option permettant de choisir
   le jeu de caractres par dfaut ("preferred document character set"),
   mais cela n'a pas d'effet, au moins avec les URLs file:/... et
   http://... servies par apache-1.3.0.

   Cependant, il y a un problme concernant les espaces et les fins de
   lignes : regardez  la section russe de x-utf-8.html, ou
   utf-8-demo.txt.

   Notez aussi que dans Lynx-2.8.2, configur avec l'option
   -enable-prettysrc, les jolies combinaisons de couleurs ne marchent
   plus correctement quand le jeu de caractres pour l'affichage  t
   positionn  "UNICODE-UTF-8". Ce problme est rsolu par le patch
   lynx282.diff.

   D'aprs les dveloppeurs de lynx : "Pour une utilisation srieuse de
   l'affichage UTF-8 avec Lynx, il est toujours recommand de compiler
   avec la bibliothque slang et -DSLANG_MBCS_HACK."
   ftp://ftp.gnu.org/pub/gnu/lynx/lynx-2.8.2.tar.gz
   http://lynx.browser.org/
   http://www.slcc.edu/lynx/
   ftp://lynx.isc.org/

  Pages de test

   Des pages de test pour les navigateurs peuvent tre trouves sur les
   pages d'Alan Wood et James Kass  :
   http://www.hclrss.demon.co.uk/unicode/#links,
   http://home.att.net/~jameskass/

4.3 Les diteurs

  yudit

   Le programme yudit de Gspr Sinai http://czyborra.com/yudit/ est un
   diteur de texte unicode de premier ordre pour le systme X Window. Il
   supporte le traitement simultan de beaucoup de langages, mthodes
   d'entre, conversions de caractres locaux standards. Il est quip
   pour supporter l'entre de texte dans tous les langages avec seulement
   un clavier anglais, en utilisant des tables de configuration du
   clavier.

   Il peut tre compil en 3 versions : interface graphique Xlib , KDE,
   ou Motif.

   Il peut tre personnalis trs facilement. Typiquement, vous voudrez
   modifier votre fonte. Depuis le menu font je choisis "Unicode". Puis,
   puisque la commande "xlsfonts '*_*-iso10646-1" donnait toujours un
   affichage ambigu, je choisis un taille de fonte de 13 (pour
   correspondre  la fonte fixe de 13 pixels de Markhus Kuhn).

   Ensuite, vous personnaliserez votre mthode d'entre. Les mthodes
   "Straight", "Unicode" et "SGML" sont les plus intressantes. Pour
   avoir des dtails sur les autres mthodes d'entres incorpores,
   regardez dans "/usr/local/share/yudit/data/".

   Pour qu'un changement devienne un rglage par dfaut pour les
   prochaines sessions, ditez votre fichier $HOME/.yuditrc.

   Les fonctionnalits gnrales de l'diteur sont limites  l'dition,
   le copier-coller, et le "chercher-remplacer" (search&replace). Pas de
   fonction d'annulation (undo).

  mined98

   mined98 est un petit diteur de texte de Michiel Huisjes, Achim Mller
   et Thomas Wolff : http://www.inf.fu-berlin.de/~wolff/mined.html. Il
   vous permet d'diter des fichier encods en UTF-8 ou 8 bits, dans un
   xterm UTF-8 ou 8-bits. Il dispose aussi de puissantes fonctionnalits
   pour entrer les caractres Unicode.

   Quand mined est lanc dans un xterm ou une console Linux en mode
   UTF-8, vous devriez positionner la variable d'environnement utf8_term,
   ou appeler mined avec l'option -U.

   mined vous permet d'diter des fichiers encods aussi bien en UTF-8
   qu'en 8-bits. Par dfaut il utilise un heuristique d'auto-dtection.
   Si vous ne voulez pas vous reposer sur des heuristiques, passez
   l'option -u  la ligne de commande lorsque vous ditez un fichier
   UTF-8, ou +u lorsque vous ditez un fichier encod en 8 bits. Vous
   pouvez changer l'interprtation  n'importe quel moment depuis
   l'diteur : il affiche l'encodage ("L:h" pour du 8-bits, "U:h" pour de
   l'UTF-8) dans la ligne de menu. Vous pouvez cliquer sur le premier de
   ces caractres pour le changer.

   Quelques bmols :
     * Le binaire Linux dans la distribution est dpass et ne supporte
       pas UTF-8. Vous devrez recompiler un binaire  partir des sources.
       Installez ensuite src/mined dans /usr/local/bin/mined et
       doc/mined.help dans /usr/local/man/cat1/mined.1, de faon  ce que
       ESC h le trouve.
     * mined ignore votre rglage "stty erase". Quand votre touche
       backspace renvoie un code ASCII 127, et que vous avez positionn
       "stty erase ^?" - ce qui est finalement le rglage le plus sr -
       vous devez appeler mined avec l'option -B de faon  ce que la
       touche backspace efface le caractre  gauche du curseur.
     * Les touches "Home", "End", "Delete" ne marchent pas.

  vim

   vim (depuis la version 5.4m) supporte les locales multi-octets, mais
   seulement si la bibliothque X a le mme support, et seulement pour
   les encodages avec au moins deux octets par caractres, i.e les
   encodages ISO-2022. Il ne supporte pas l'UTF-8.

  emacs

   Avant tout, vous devriez lire la section "International Character Set
   Support" (noeud "International") dans le manuel d'Emacs. En
   particulier, notez que vous devez dmarrer Emacs avec la commande

$ emacs -fn fontset-standard

   pour qu'il utilise un jeu de fontes comprenant beaucoup de caractres
   internationaux.

    court terme, le package emacs-utf
   http://www.cs.ust.hk/faculty/otfried/Mule/ d'Otfried Cheong procure un
   "unicode-utf-8" pour Emacs. Aprs avoir compil le programme
   "utf2mule" et l'avoir install quelque part dans votre $PATH,
   installez aussi unicode.el, muleuni-1.el, unicode_char.el quelque
   part, et ajoutez les lignes

     (setq load-path (cons "/home/user/somewhere/emacs" load-path))
     (if (not (string-match "XEmacs" emacs-version))
       (progn
         (require 'unicode)
         (if (eq window-system 'x)
           (progn
             (create-fontset-from-fontset-spec
               "-misc-fixed-medium-r-normal-*-12-*-*-*-*-*-fontset-standard")
             (create-fontset-from-fontset-spec
               "-misc-fixed-medium-r-normal-*-13-*-*-*-*-*-fontset-standard")
             (create-fontset-from-fontset-spec
               "-misc-fixed-medium-r-normal-*-14-*-*-*-*-*-fontset-standard")
             (create-fontset-from-fontset-spec
               "-misc-fixed-medium-r-normal-*-15-*-*-*-*-*-fontset-standard")
             (create-fontset-from-fontset-spec
               "-misc-fixed-medium-r-normal-*-16-*-*-*-*-*-fontset-standard")
             (create-fontset-from-fontset-spec
               "-misc-fixed-medium-r-normal-*-18-*-*-*-*-*-fontset-standard")))
))

    votre $HOME/.emacs. Pour activer un des jeux de fontes, utilisez
   l'item "Set Font/FonSet" du menu mule, ou Shift-down-mouse-1. Pour
   l'instant les jeux de fontes avec des hauteurs de 15 et 13 ont le
   meilleur support Unicode, grce aux fontes 9x15 et 6x13 de Markus
   Kuhn. Pour ouvrir un fichier encod en UTF-8, vous pouvez taper

M-x universal-coding-system-argument unicode-utf8 RET
M-x find-file filename RET

   ou

C-x RET c unicode-utf8 RET
C-x C-f filename RET

   Notez que cela marche avec Emacs seulement en mode fentre, pas en
   mode terminal.

   Richard Stallman prvoit  long terme d'ajouter un support d'UTF-8
   intgr  Emacs.

  Xemacs

   (Cette section est crite par Gilbert Baumann.)

   Voici comment apprendre  XEmacs (20.4 configur avec MULE) l'encodage
   UTF-8. Malheureusement vous aurez besoin des sources pour pouvoir le
   patcher.

   D'abord vous aurez besoin de ces fichiers fournis par Tomohiko
   Morioka :

   http://turnbull.sk.tsukuba.ac.jp/Tools/XEmacs/xemacs-21.0-b55-emc-b55-
   ucs.diff

   http://turnbull.sk.tsukuba.ac.jp/Tools/XEmacs/xemacs-ucs-conv-0.1.tar.
   gz

   Le .diff est un diff pour les sources C. Le tarball contient du code
   elisp, qui fournit beaucoup de tables de code qui permettent la
   conversion depuis et vers Unicode. Comme le nom du diff le suggre, il
   est prvu pour XEmacs-21. J'ai eu besoin d'aider un peu 'patch'. La
   diffrence la plus notable avec mes sources XEmacs-20.4 est que
   file-coding.[ch] tait appel mule-coding.[ch]

   Pour ceux qui connaissent peu XEmacs-MULE (comme moi) voici un guide
   rapide :

   Ce que nous appelons un encodage est appel par MULE "coding system".
   Les commandes les plus importantes sont :

M-x set-file-coding-system
M-x set-buffer-process-coding-system [comint buffer]

   et la variable 'file-coding-system-alist', qui guide 'find-file' pour
   qu'il trouve l'encodage utilis. Une fois que tout marchait, la
   premire chose que j'ai faite fut ceci.

   Ce code cherche une ligne de mode spciale commenant par _*_ quelque
   part dans les 600 premiers octets du fichier qui va tre ouvert. Si
   cette ligne contient un champ "Encoding: xyz;" et que l'encodage xyz
   ("coding system" dans le langage d'Emacs) existe, il le slectionne.
   Donc maintenant vous pouvez utiliser :

;;;  _*_ Mode: Lisp; Syntax: Common-Lisp; Package: CLEX; Encoding:
utf-8; _*_

   et Emacs entrera en mode utf-8  partir de l.

   Une fois que tout marchait, j'ai dfini une macro pour \u03BB (lambda
   grec) comme ceci :

(defmacro \u03BB (x) '(lambda .,x))

  nedit

  xedit

   En thorie, xedit devrait tre capable d'diter des fichiers UTF-8 si
   vos locales sont configures en consquence (voir au dessus), et que
   vous ajoutez la ligne "Xedit*international: true"  votre fichier
   $HOME/.Xdefaults.  En pratique, il reconnatra les encodages UTF-8 des
   caractres non ASCII, mais il les affichera comme des squences de
   caractres "@".

  axe

   En thorie, axe devrait tre capable d'diter des fichiers UTF-8 si
   vos locales sont configures en consquence (voir au dessus), et que
   vous ajoutez la ligne "Axe*International: true"  votre fichier
   $HOME/.Xdefaults. En pratique, il vous laissera simplement un joli
   fichier core.

  pico

  TeX

   Les distributions de teTex 0.9 (et suprieures) contiennent une
   adaptation Unicode de TeX, appele Omega (
   http://www.gutenberg.eu.org/omega/
   ftp://ftp.ens.fr/pub/tex/yannis/omega), mais est-ce que quelqu'un
   connatrait un tutorial sur ce systme ?

   Autres liens peut-tre en rapport :
   http://www.dante.de/projekte/nts/NTS-FAQ.html,
   ftp://ftp.dante.de/pub/tex/language/chinese/CJK/

4.4 Les logiciels de courrier lectronique

   MIME : RFC 2279 dfinit les jeux de caractres UTF-8 et MIME, qui
   peuvent tre convertis en encodage 8-bits, quoted-printable ou base64.
   L'ancienne norme MIME UTF-7 (RFC 2152) est considre comme tant
   obsolte ("deprecated") et ne devrait plus tre utilise.

   Les clients mail sortis aprs le 1er janvier 1999 devraient tre
   capables d'envoyer et d'afficher des courriers encods en UTF-8, sous
   peine d'tre considrs comme incomplets. Mais ces courriers doivent
   contenir les tiquettes (labels) MIME :

Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8-bit

   Envoyer simplement un fichier UTF-8 vers "mail" via un _pipe_ sans
   faire attention aux labels MIME ne fonctionnera pas. Les gens qui
   implmentent des clients de courrier devraient jeter un oeil 
   http://www.imc.org/imc-intl/ et http://www.imc.org/mail-i18n.html

   Parlons maintenant des clients mail individuels (ou "mail user
   agents") :

  pine

   La situation pour une version non patche de pine 4.10 est la
   suivante.

   Pine ne fait pas de conversion de jeu de caractres. Mais il vous
   permet de voir des courriers UTF-8 dans une fentre texte UTF-8
   (console Linux ou xterm).

   Normalement, Pine se plaindra du fait qu'il y a diffrents jeux de
   caractres  chaque fois que vous visualiserez un courrier encod en
   UTF-8. Pour vous dbarrasser de cet avertissement, choisissez S
   (setup), puis C (config), et changez la valeur de "character set" 
   UTF-8. Cette option ne fera rien  part rduire le nombre
   d'avertissements, puisque Pine ne connat pas UTF-8 en interne.

   Notez aussi que pour Pine la notion de caractres Unicode est trs
   limite : il affichera les caractres latins et grecs, mais ce sont
   les seuls types de caractres Unicode qu'il connat.

   Un patch de Robert Brady
   http://www.ents.susu.soton.ac.uk/~robert/pine-utf8-0.1.diff ajoute 
   Pine un support UTF-8. Avec ce patch, il peut dcoder et afficher les
   enttes et le corps des messages correctement. Ce patch ncessite
   GNOME libunicode http://cvs.gnome.org/lxr/source/libunicode/.

  Kmail

   Kmail (comme tout KDE 1.0) ne contient absolument aucun support pour
   les mails en UTF-8.

  Netscape Communicator

   Le Messenger de Netscape Communicator peut envoyer et afficher des
   mails encods en UTF-8, mais cela ncessite quelques interventions
   manuelles de l'utilisateur.

   Pour envoyer un mail encod en UTF-8 : aprs avoir ouvert la fentre
   "Compose", mais avant de commencer  composer le message, slectionnez
   dans le menu "View -> Character Set ->Unicode (UTF-8)" puis composez
   votre message et envoyez le.

   Quand vous recevez un courrier encod en UTF-8, Netscape ne l'affiche
   malheureusement pas en UTF-8 directement, et ne donne mme pas un
   indice visuel montrant que le courrier a t encod en UTF-8. Vous
   devez slectionner manuellement l'option adquate dans "View ->
   Character Set -> Unicode (UTF-8)". Pour afficher les courriers UTF-8,
   Netscape utilise des fontes diffrencies. Vous pouvez ajuster la
   fonte utilise dans la bote de dialogue "Edit -> Preferences ->
   Fonts". Choisissez la catgorie de fontes "Unicode".

  Emacs (rmail, vm)

4.5 Autres applications en mode texte

  less

   Telchargez ftp://ftp.gnu.org/pub/gnu/less/less-340.tar.gz et
   appliquez le patch less-340-utf-2.diff de Robert Brady
   <rwb197@ecs.soton.ac.uk>. Puis positionnez la variable d'environnement
   LESSCHARSET :

export LESSCHARSET=utf-8

   Si vous avez positionn une variable d'environnement LESSKEY, vrifiez
   aussi que le fichier vers lequel elle pointe ne dfinit pas
   LESSCHARSET. Si ncessaire, rgnrez ce fichier en utilisant la
   commande 'lesskeys', ou enlevez la variable d'environnement LESSKEYS.

  expand, wc

   Procurez vous GNU textutils-2.0 et appliquez le patch
   textutils-2.0.diff, puis lancez configure.
   Ajoutez "#define HAVE_MBRTOWC 1", "#define HAVE_FPUTWC 1"  config.h.
   Dans src/Makefile, modifiez CFLAGS et LDFLAGS pour qu'ils incluent les
   rpertoires o libutf8 est install, puis recompilez.

  col, colcrt, colrm, column, rev, ul

   Procurez vous le package util-linux-2.9y, configurez le, puis
   dfinissez ENABLE_WIDECHAR dans defines.h , changez le "# if 0" en "#
   if 1" dans lib/widechar.h. dans text-utils/Makefile, modifiez CFLAGS
   et LDFLAGS pour qu'ils incluent les rpertoires o libutf8 est
   install. Puis recompilez.

  figlet

   Figlet 2.2 a une option pour grer l'entre en UTF-8 : "figlet -C
   utf-8".

  kermit

   Le programme de communication srie C-Kermit
   http://www.columbia.edu/kermit/, dans les versions 7.0beta10 et
   suprieures, comprend les encodages de fichier et de transfert UTF-8
   et UCS-2, et l'encodage de terminal UTF-8. La documentation de ces
   caractristiques peut tre trouve 
   ftp://kermit.columbia.edu/kermit/test/text/ckermit2.txt

4.6 Autres applications X11

   La Xlib de X11 ne peut malheureusement pas encore localiser UTF-8,
   cela devrait tre travaill prochainement.

5. Comment faire pour que vos programmes comprennent Unicode

5.1 C/C++

   Le type C 'char' est 8-bits et restera 8-bits parce qu'il dsigne la
   plus petite unit de donnes adressable. Divers amnagements sont
   disponibles :

  Pour le traitement de texte normal

   Le standard ISO/ANSI C contient, dans une correction qui fut ajoute
   en 1995, un type de caractre cod sur 16 bits `wchar_t', un ensemble
   de fonctions comme celles contenues dans <string.h> et <ctype.h>
   (dclares respectivement dans <wchar.h> et <wctype.h>), et un
   ensemble de fonctions de conversion entre `char *' et `wchar_t *'
   (dclares dans <stdlib.h>).

   Voici de bonnes rferences pour cette interface de programmation :

     * Le manuel de GNU libc-2.1, chapitres 4 "Characters Handling" et 6
       "Character Set Handling"
     * Les pages de manuel man-mbswcs.tar.gz
     * La rfrence de la bibliothque C Dinkumware
       http://www.dinkumware.com/htm_cl/
     * La spcification Single Unix d'OpenGroup
       http://www.UNIX-systems.org/online.html

   Avantages de cette interface de programmation :
     * C'est un standard non propritaire.
     * Ces fonctions font ce qu'il faut, selon les locales de
       l'utilisateur. Tout ce qu'un programme doit faire est d'appeler
       setlocale(LC_ALL,"");.

   Inconvnients de cette interface de programmation :
     * Certaines de ces fonctions ne sont pas "multithread-safe" parce
       qu'elles conservent un tat interne cach entre les appels de
       fonction.
     * Il n'y a pas de type de donne de premire classe. Par consquent
       cette API ne peut pas tre utilise raisonnablement pour tout ce
       qui ncessite plus d'une locale ou d'un jeu de caractres au mme
       moment.
     * La plupart des systmes d'exploitation ont un mauvais support de
       cette interface de programmation.

  Notes concernant la portabilit

   Une variable `wchar_t' peut tre encode en Unicode ou non. Ceci
   dpend de la plateforme et quelquefois aussi des locales. Une squence
   multi-octets `wchar_t' peut tre encode en UTF-8 ou non selon la
   plateforme, et parfois selon les locales.

   En dtails, voici ce que la Single Unix specification dit  propos du
   type `wchar_t' :

   _Tous les codes de caractres 16 bits dans un processus donn
   consistent en un nombre gal de bits. Ceci en contraste avec les
   caractres, qui peuvent tre constitus d'un nombre variable d'octets.
   L'octet ou la squence d'octets qui reprsentent un caractre peuvent
   aussi tre reprsents comme un code de caractre 16 bits. Les codes
   de caractres 16 bits fournissent donc une taille uniforme pour
   manipuler les donnes textuelles. Un code de caractre 16 bits ayant
   tous les bits  0 est un code de caractre 16 bits nul (null), et
   termine une chane. La valeur des caractres larges pour chaque membre
   du "Portable Character Set" _(i.e ASCII)_ est gale quand il est
   utilis en tant que seul caractre dans un caractre entier (integer)
   constant. Les codes de caractres 16 bits pour les autres caractres
   dpendent des locales et de l'implmentation. Les octets modificateurs
   d'tat n'ont pas de reprsentation en code de caractre 16 bits._

   Une consquence notable est que dans des programmes portables vous ne
   devriez pas utiliser des caractres non-ASCII dans des chanes
   littrales. Cela signifie que mme si vous savez que les doubles
   guillemets ont les codes U+201C et U+201D, vous ne devriez pas crire
   une chane littrale L"\u201cBonjour\u201d, dit il" ou
   "\xe2\x80\x9cBonjour\xe2\x80\x9d, dit il" dans des programmes C.
   Utilisez plutt GNU gettext comme cela : gettext ("'Bonjour', dit
   il"), et crez une base de donnes de messages en.UTF-8.po qui traduit
   "'Bonjour' dit il" en "\u201cBonjour\u201d, dit il".

   Voici une tude de la portabilit des amnagements ISO/ANSI C sur
   diverses implmentations d'Unix. La GNU glibc-2.2 les supportera tous,
   mais pour l'instant nous avons le tableau suivant.

   _GNU glibc-2.0.x, glibc-2.1.x_

          + <wchar.h> et <wctype.h> existent.
          + Possde les fonctions wcs/mbs, mais pas
            fgetwc/fputwc/wprintf.
          + Pas de locales UTF-8.
          + mbrtowc retourne EILSEQ pour les octets >= 0x80.

   _Solaris 2.7_

          + <wchar.h> et <wctype.h> existent.
          + Possde toutes les fonctions wcs/mbs, fgetwc/fputwc/wprintf.
          + Supporte les locales UTF-8 suivantes : en_US.UTF-8, de.UTF-8,
            es.UTF-8, fr.UTF-8, it.UTF-8, sv.UTF-8.
          + mbrtowc retourne EILSEQ pour les octets >= 0x80.

   _OSF/1 4.0d_

          + <wchar.h> et <wctype.h> existent.
          + Possde toutes les fonctions wcs/mbs, fgetwc/fputwc/wprintf.
          + A en plus universal.utf8@ucs4 locale, voir "man 5 unicode".
          + mbrtowc ne connat pas UTF-8.

   _Irix 6.5_

          + <wchar.h> et <wctype.h> existent.
          + Possde les fonctions wcs/mbs et fgetwc/fputwc, mais pas
            wprintf.
          + N'a pas de locales multi-octets.
          + A seulement un simulacre de dfinition pour mbstate_t.
          + N'a pas mbrtowc.

   _HP-UX 11.00_

          + <wchar.h> existe, mais pas <wctype.h>.
          + Possde les fonctions wcs/mbs et fgetwc/fputwc, mais pas
            wprintf.
          + A une locale C.utf8.
          + N'a pas mbstate_t.
          + N'a pas mbrtowc.

   _AIX 4.2_

          + <wchar.h> existe, mais pas <wctype.h> - utilisez  la place
            <ctype.h> et <wchar.h>.
          + Possde les fonctions wcs/mbs et fgetwc/fputwc, mais pas
            wprintf.
          + Possde les locales UTF-8 suivantes : ET_EE.UTF-8,
            LT_LT.UTF-8, LV_LV.UTF-8, ZH_CN.UTF-8.
          + N'a pas mbstate_t.
          + N'a pas mbrtowc.

   Par consquent je recommande l'utilisation des fonctions redmarrables
   et multithread-safe wcsr/mbsr. Oubliez les systmes qui ne les ont pas
   (Irix, HP-UX, Aix), et utilisez le plug-in qui permet d'utiliser des
   locales UTF-8, libutf8_plug.so (voir ci dessous) sur les systmes qui
   vous permettent de compiler des programmes qui utilisent ces fonctions
   wcrs/mbsr (Linux, Solaris, OSF/1).

   Un avis similaire, donn par Sun dans
   http://www.sun.com/software/white-papers/wp-unicode/, section
   "Internationalized Applications with Unicode", est :

   _Pour internationaliser correctement une application utilisez les
   indications suivantes :_
    1. _vitez l'accs direct  Unicode. Ceci est la tche de la couche
       d'internationalisation de la plateforme._
    2. _Utilisez le modles POSIX pour les interfaces multi-octets et 
       caractres 16 bits._
    3. _Appelez seulement les fonctions de l'API que la couche
       d'internationalisation fournit pour la langue et les opration
       spcifiques  la culture._
    4. _Restez indpendant de l'encodage._

   Si, pour une raison quelconque, vous devez vraiment supposer que
   'wchar_t' est Unicode dans un morceau de code (par exemple, si vous
   voulez faire un traitement spcial de certains caractres Unicode),
   vous devriez rendre ce bout de code conditionnel selon le rsultat de
   is_locale_utf88(). Autrement vous allez mettre la pagaille dans le
   comportement de votre programme sur d'autres plateformes, ou si
   d'autres locales sont utilises. La fonction is_locale_utf8() est
   dclare dans utf8locale.h et dfinie dans utf8locale.c.

  La bibliothque libutf8

   Une implmentation portable de l'API ISO/ANSI C, qui supporte les
   locales 8-bits et les locales UTF-8, peut tre trouve dans
   libutf8-0.5.2.tar.gz

   Avantages :

     * Ds maintenant un support pour Unicode UTF-8 portable, mme sur
       les systmes d'exploitation dont le support des caractres
       multi-octets ne marche pas, ou qui n'ont pas du tout de support
       pour les caractres multi-octets/larges.
     * Le mme binaire marche pour toutes les locales 8-bit et les
       locales UTF-8 supportes par le systme.
     * Quand un systme d'exploitation fournit un vrai support pour les
       caractres multi-octets, vous pouvez en tirer avantage simplement
       en recompilant sans l'option du compilateur -DHAVE_LIBUTF8.

  La mthode Plan9

   Le systme d'exploitation Plan9, une variante d'Unix, utilise UTF-8
   comme encodage dans toutes ses applications. Son type de caractre
   large est appel 'Rune', pas 'wchar_'. Des parties ce ses
   bibliothques, crites par Rob Pike et Howard Trikey, sont disponibles
    ftp://ftp.cdrom.com/pub/netlib/research/9libs/9libs-1.0.tar.gz. Une
   autre bibliothque similaire, crite par Alistair G. Crook, est 
   ftp://ftp.cdrom.com/pub/NetBSD/packages/distfiles/libutf-2.10.tar.gz.
   En particulier, chacune de ces bibliothques contient un moteur
   d'expressions rationnelles qui comprend l'UTF-8.

   Dsavantages de cette API :

     * UTF-8 est compil dans la bibliothque, pas optionnel. Les
       programmes compils dans cet univers perdent le support des
       encodages 8-bits qui sont toujours utiliss frquemment en Europe.

  Pour les interfaces utilisateur graphiques

   La bibliothque QT-2.0 http://www.troll.no/ contient la classe QString
   qui est totalement Unicode. Vous pouvez utiliser les fonctions membres
   QString::utf8 et QString::fromUtf8 pour convertir depuis/vers un texte
   encod en UTF-8. Les fonctions membres QString::ascii et
   QString::latin1 ne devraient plus tre utilises.

  Pour la manipulation de texte avance

   Les bibliothques mentionnes prcdemment implmentent des versions
   des concepts ASCII qui comprennent Unicode. Voici des bibliothques
   qui traitent des concepts Unicode, comme titlecase (Une troisime
   casse de lettres, diffrente des majuscules et des minuscules), la
   distinction entre la ponctuation et les symboles, la dcomposition
   canonique, les classes combinables, le classement canonique et
   d'autres choses du mme genre.

   _ucdata-1.9_
          La bibliothque ucdata de Mark Leisher
          http://crl.nmsu.edu/~mleisher/ucdata.html s'occupe des
          proprits des caractres, de la conversion de la casse, de la
          dcomposition, des classes combines.

   _ICU_
          Ce sont les classes IBM pour Unicode.
          http://www.alphaworks.ibm.com/tech/icu/. Une bibliothque trs
          dtaille comprenant des chanes de caractres Unicode, des
          paquets de ressources, des formateurs de nombres, de date,
          d'heure et de messages, des assemblages, des assembleurs de
          messages et plus encore. Beaucoup de locales sont supportes.
          Cette bibliothque est portable pour Unix et Win32, mais
          compilera sans intervention ("out of the box") seulement avec
          la libc6, pas la libc5.

   _libunicode_
          La librairie Unicode de GNOME
          http://cvs.gnome.org/lxr/source/libunicode/ de Tom Tromey entre
          autres. Elle couvre la conversion du jeu de caractres, les
          proprits des caractres, la dcomposition.

  Pour la conversion

   Deux bibliothques de conversion qui supportent UTF-8 et un grand
   nombre de de jeux de caractres 8-bits, sont disponibles :

  L'implmentation iconv d'Ulrich Drepper, contenue dans la GNU glibc-2.2.1

   ftp://ftp.gnu.org/pub/gnu/glibc/glibc-2.1.1.tar.gz.

   Avantages :

     * iconv est conforme au standard POSIX, les programmes qui
       l'utilisent pour la conversion depuis/vers UTF-8 tourneront aussi
       sous Solaris. Cependant le nom des jeux de caractres diffre
       entre les plateformes. Par exemple, "EUC-JP" sous glibc devient
       "eucJP" sous HP-UX. (Le nom INIA officiel pour ce jeu de
       caractres est "EUC-JP". Il s'agit donc clairement d'une
       dficience de HP-UX.)
     * Aucune bibliothque supplmentaire n'est ncessaire.

  librecode par Franois Pinard

   ftp://ftp.gnu.org/pub/gnu/recode/recode-3.5.tar.gz.

   Avantages :

     * Support pour la translittration, i.e conversion de caractres
       non-ASCII en squences de caractres ASCII de faon  prserver la
       lisibilit pour les humains, mme lorsqu'une transformation sans
       pertes est impossible.

   Problmes :

     * Cette API est non standard.

  Les autre approches

   _libutf-8_
          libutf-8, de G.Adam.Stanislav <adam@whizkidtech.net> contient
          quelques fonctions pour la conversion depuis/vers des flux
          "FILE*". http://www.whizkidtech.net/i18n/libutf-8-1.0.tar.gz
          Avantages :

          + Trs petit.

          Problmes :

          + API non standard ;
          + UTF-8 est compil dans la bibliothque, pas optionnel. Les
            programmes compils dans cet univers perdent le support des
            encodages 8-bits qui sont toujours utiliss frquemment en
            Europe ;
          + L'installation n'est pas vidente : le Makefile doit tre
            modifi. Pas d'auto-configuration.

5.2 Java

   Java supporte Unicode en interne. Le type 'char' dsigne un caractre
   Unicode, et la classe 'java.lang.String' dsigne une chane de
   caractres construite  partir de caractres Unicode.

   Java peut afficher n'importe quel caractre  travers son systme de
   fentrage AWT,  condition que

    1. vous positionniez la proprit systme "user.language" de faon
       approprie.
    2. Les dfinitions de jeux de fontes
       /usr/lib/java/lib/font.properties._language_ soient appropries,
       et
    3. Le fontes spcifies dans ce fichier soient installes.

   Par exemple, pour afficher du texte contenant des caractres japonais,
   vous devriez installer des fontes japonaise, et lancer "java
   -Duser.language=ja ...". Vous pouvez combiner les jeux de fontes :
   pour pouvoir afficher des caractres d'Europe de l'ouest, grecs et
   japonais simultanment, vous devriez crer une combinaison des
   fichiers "font.properties" (couvre ISO-8859-1), "font.properties.el"
   (couvre ISO-8859-7) et "font.properties.ja" dans un seul fichier.
   ??Ceci n'a pas t test??

   Les interfaces java.io.DataInput et java.io.DataOutput contiennent des
   mthodes appeles 'readUTF', et 'writeUTF' respectivement. Mais notez
   qu'elles n'utilisent pas UTF-8 ; elles utilisent un encodage UTF-8
   modifi : le caractre NUL est encod dans une squence de deux octets
   0xC0 et 0x80  la place de 0x00, et un octet 0x00 est ajout  la fin.
   Encodes de cette faon, les chanes peuvent contenir des caractres
   NUL mais elles doivent nanmoins tre prfixes par un champ de
   taille. Les fonctions C <string.h> comme strlen() et strcpy() peuvent
   tre utilises pour les manipuler.

5.3 Lisp

   Le standard Lisp ordinaire dtermine deux types de caractres :
   'base-char' et 'character'. C'est  l 'implmentation d'ajouter un
   support Unicode ou non. Ce langage dtermine aussi un mot-clef
   argument ':external-format' pour 'open' comme place naturelle pour
   spcifier un jeu de caractres ou un encodage.

   Parmi les implmentation gratuites du lisp standard, seul CLISP
   http://clisp.cons.org/ supporte Unicode. Vous aurez besoin d'une
   version de CLISP datant de juillet 99 ou plus rcente.
   ftp://clisp.cons.org/pub/lisp/clisp/source/clispsrc.tar.gz Les types
   "base-char" et "character" sont tous quivalents au 16-bits Unicode.
   L'encodage utilis pour le fichier ou l'I/O socket/pipe peut tre
   spcifi par l'argument ':external-format'. Les encodages utiliss
   pour les oprations d'entre/sortie sur des ttys et l'encodage par
   dfaut pour les I/O file/socket dpendent des locales.

   Parmi les implmentations commerciales du Lisp standard, seule Eclipse
   http://www.elwood.com/eclipse/eclipse.htm supporte Unicode. Voir
   http://www.elwood.com/eclipse/char.htm Le type 'base-char' est
   quivalent  ISO-8859-1, et le type 'character' contient tous les
   caractres Unicode. L'encodage utilis pour les entres/sorties sur un
   fichier peut tre dfini  travers une combinaison des arguments de
   'open' ':element-type' et :'external.format'.
   Limitations : les fonctions d'attributs de caractres sont dpendantes
   des locales. Les sources et les fichiers de sources compils ne
   peuvent pas contenir des chanes Unicode littrales. L'implmentation
   commerciale du Lisp standard Allegro CL ne contient pas encore de
   support Unicode, mais Erik Naggum y travaille.

5.4 Ada95

   Ada95 a t conu pour supporter Unicode, et la bibliothque standard
   Ada95 contient les types de donnes spciaux ISO 10646-1
   Wide_Character et Wide_String, ainsi que de nombreuses procdures et
   fonctions associes. Le compilateur Ada95 GNU (gnat-3.11 ou plus)
   supporte UTF-8 comme encodage externe des caractres 16 bits. Cela
   vous autorise  utiliser UTF-8  la fois dans le code source et dans
   les entres/sorties de l'application. Pour l'activer dans
   l'application, utilisez "WCEM=8" dans la chane FORM quand vous ouvrez
   un fichier, et utilisez l'option du compilateur "-gnatW8" si le code
   source est UTF-8. Pour plus de dtails, voyez les manuels de rfrence
   GNAT et Ada95.
