  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'labo
  ration. Toutes les astuces, suggestions, patchs, URLs sont les bien
  venus.  NDT : Il a t convenu avec l'auteur que seule la prsente
  version de ce document serait traduite dans un premier temps, le con
  tenu 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.
  ______________________________________________________________________

  Table des matires


















































  1. Introduction

     1.1 Pourquoi Unicode ?
     1.2 Les encodages d'Unicode
        1.2.1 Notes pour les dveloppeurs C/C++
     1.3 Liens

  2. Configuration de l'affichage

     2.1 La console Linux
     2.2 Fontes trangres pour X11
     2.3 Les fontes Unicode pour X11
     2.4 Unicode xterm
     2.5 Divers

  3. Configuration des locales

     3.1 Les fichiers et le kernel
     3.2 Le kernel et les ttys
     3.3 Conversion de donnes gnrales
     3.4 Les variables d'environnement locales
     3.5 Crer les fichiers pour le support des locales
     3.6 Ajouter le support pour la bibliothque C
     3.7 Conversion des catalogues de messages

  4. Applications spcifiques.

     4.1 Le rseau
        4.1.1 rlogin
        4.1.2 telnet
     4.2 Les navigateurs
        4.2.1 Netscape
        4.2.2 Lynx
        4.2.3 Pages de test
     4.3 Les diteurs
        4.3.1 yudit
        4.3.2 mined98
        4.3.3 vim
        4.3.4 emacs
        4.3.5 Xemacs
        4.3.6 nedit
        4.3.7 xedit
        4.3.8 axe
        4.3.9 pico
        4.3.10 TeX
     4.4 Les logiciels de courrier lectronique
        4.4.1 pine
        4.4.2 Kmail
        4.4.3 Netscape Communicator
        4.4.4 Emacs (rmail, vm)
     4.5 Autres applications en mode texte
        4.5.1 less
        4.5.2 expand, wc
        4.5.3 col, colcrt, colrm, column, rev, ul
        4.5.4 figlet
        4.5.5 kermit
     4.6 Autres applications X11

  5. Comment faire pour que vos programmes comprennent Unicode

     5.1 C/C++
        5.1.1 Pour le traitement de texte normal
           5.1.1.1 Notes concernant la portabilit
           5.1.1.2 La bibliothque libutf8
           5.1.1.3 La mthode Plan9
        5.1.2 Pour les interfaces utilisateur graphiques
        5.1.3 Pour la manipulation de texte avance
        5.1.4 Pour la conversion
           5.1.4.1 L'implmentation iconv d'Ulrich Drepper, contenue dans la GNU glibc-2.2.1
           5.1.4.2 librecode par Franois Pinard
        5.1.5 Les autre approches
     5.2 Java
     5.3 Lisp
     5.4 Ada95


  ______________________________________________________________________

  11..  IInnttrroodduuccttiioonn



  11..11..  PPoouurrqquuooii UUnniiccooddee ??

  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1..22..  LLeess eennccooddaaggeess dd''UUnniiccooddee

  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 :


     UUTTFF--8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).


     UUCCSS--22
        Chaque caractre est reprsent par deux octets. Cet encodage
        peut reprsenter seulement les  65536 premiers caractres
        d'Unicode.


     UUTTFF--1166
        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.


     UUCCSS--4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.


     UUTTFF--8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.


     UUCCSS--22 eett UUTTFF--1166
        Pas de changement pour le chinois/japonais/coren, augmentation
        de 100 % pour l'US ASCII et ISO-8859-1, le grec et le
        cyrillique.


     UUCCSS--4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.


  11..22..11..  NNootteess ppoouurr lleess ddvveellooppppeeuurrss CC//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1..33..  LLiieennss

  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2..  CCoonnffiigguurraattiioonn ddee ll''aaffffiicchhaaggee

  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2..11..  LLaa ccoonnssoollee LLiinnuuxx

  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.tar.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..22..  FFoonntteess ttrraannggrreess ppoouurr XX1111

  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2..33..  LLeess ffoonntteess UUnniiccooddee ppoouurr XX1111

  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2..44..  UUnniiccooddee xxtteerrmm

  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2..55..  DDiivveerrss

  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3..  CCoonnffiigguurraattiioonn ddeess llooccaalleess



  33..11..  LLeess ffiicchhiieerrss eett llee kkeerrnneell

  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3..22..  LLee kkeerrnneell eett lleess ttttyyss

  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..33..  CCoonnvveerrssiioonn ddee ddoonnnneess ggnnrraalleess

  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3..44..  LLeess vvaarriiaabblleess dd''eennvviirroonnnneemmeenntt llooccaalleess

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


     LLAANNGGUUAAGGEE
        Remplacement pour LC_MESSAGES. Seulement utilis par GNU
        gettext.


     LLCC__AALLLL
        Remplacement pour toute les autres variables LC_* :


     LLCC__CCTTYYPPEE,, LLCC__MMEESSSSAAGGEESS,, LLCC__CCOOLLLLAATTEE,, LLCC__NNUUMMEERRIICC,, LLCC__MMOONNEETTAARRYY,, LLCC__TTIIMMEE
        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.


     LLAANNGG
        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 _l_a_n_g_u_a_g_e est un code de langue ISO 639 (en minuscules), _t_e_r_r_i_t_o_r_y
  est un code de pays ISO 3166 (en majuscules), _c_o_d_e_s_e_t dsigne une
  table de caractres, et _m_o_d_i_f_i_e_r 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3..55..  CCrreerr lleess ffiicchhiieerrss ppoouurr llee ssuuppppoorrtt ddeess llooccaalleess

  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3..66..  AAjjoouutteerr llee ssuuppppoorrtt ppoouurr llaa bbiibblliiootthhqquuee C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3..77..  CCoonnvveerrssiioonn ddeess ccaattaalloogguueess ddee mmeessssaaggeess

  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4..  AApppplliiccaattiioonnss ssppcciiffiiqquueess..



  44..11..  LLee rrsseeaauu



  44..11..11..  rrllooggiinn

  Marche bien avec les patches mentionns prcdemment.


  44..11..22..  tteellnneett

  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4..22..  LLeess nnaavviiggaatteeuurrss



  44..22..11..  NNeettssccaappee

  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/


  44..22..22..  LLyynnxx

  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/


  44..22..33..  PPaaggeess ddee tteesstt

  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4..33..  LLeess ddiitteeuurrss



  44..33..11..  yyuuddiitt

  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).


  44..33..22..  mmiinneedd9988

  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.


  44..33..33..  vviimm

  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.


  44..33..44..  eemmaaccss

  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.


  44..33..55..  XXeemmaaccss


  (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 <gb-hacks.el>.

  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))





  44..33..66..  nneeddiitt



  44..33..77..  xxeeddiitt

  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 "@".


  44..33..88..  aaxxee

  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.


  44..33..99..  ppiiccoo



  44..33..1100..  TTeeXX

  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..44..  LLeess llooggiicciieellss ddee ccoouurrrriieerr lleeccttrroonniiqquuee

  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 _p_i_p_e 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") :


  44..44..11..  ppiinnee

  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/.


  44..44..22..  KKmmaaiill

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


  44..44..33..  NNeettssccaappee CCoommmmuunniiccaattoorr

  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".


  44..44..44..  EEmmaaccss ((rrmmaaiill,, vvmm))



  44..55..  AAuuttrreess aapppplliiccaattiioonnss eenn mmooddee tteexxttee



  44..55..11..  lleessss

  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 LESS
  CHARSET.  Si ncessaire, rgnrez  ce fichier en utilisant la com
  mande


  44..55..22..  eexxppaanndd,, wwcc

  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.


  44..55..33..  ccooll,, ccoollccrrtt,, ccoollrrmm,, ccoolluummnn,, rreevv,, uull

  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.


  44..55..44..  ffiigglleett

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


  44..55..55..  kkeerrmmiitt

  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4..66..  AAuuttrreess aapppplliiccaattiioonnss XX1111

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


  55..  CCoommmmeenntt ffaaiirree ppoouurr qquuee vvooss pprrooggrraammmmeess ccoommpprreennnneenntt UUnniiccooddee



  55..11..  CC//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 :



  55..11..11..  PPoouurr llee ttrraaiitteemmeenntt ddee tteexxttee nnoorrmmaall


  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.


  55..11..11..11..  NNootteess ccoonncceerrnnaanntt llaa ppoorrttaabbiilliitt

  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
  <http://www.UNIX-systems.org/online.html> dit  propos du type
  `wchar_t' :

  _T_o_u_s _l_e_s _c_o_d_e_s _d_e _c_a_r_a_c_t__r_e_s _1_6 _b_i_t_s _d_a_n_s _u_n _p_r_o_c_e_s_s_u_s _d_o_n_n_
  _c_o_n_s_i_s_t_e_n_t _e_n _u_n _n_o_m_b_r_e __g_a_l _d_e _b_i_t_s_. _C_e_c_i _e_n _c_o_n_t_r_a_s_t_e _a_v_e_c _l_e_s
  _c_a_r_a_c_t__r_e_s_, _q_u_i _p_e_u_v_e_n_t __t_r_e _c_o_n_s_t_i_t_u__s _d_'_u_n _n_o_m_b_r_e _v_a_r_i_a_b_l_e _d_'_o_c_t_e_t_s_.
  _L_'_o_c_t_e_t _o_u _l_a _s__q_u_e_n_c_e _d_'_o_c_t_e_t_s _q_u_i _r_e_p_r__s_e_n_t_e_n_t _u_n _c_a_r_a_c_t__r_e _p_e_u_v_e_n_t
  _a_u_s_s_i __t_r_e _r_e_p_r__s_e_n_t__s _c_o_m_m_e _u_n _c_o_d_e _d_e _c_a_r_a_c_t__r_e _1_6 _b_i_t_s_.  _L_e_s _c_o_d_e_s
  _d_e _c_a_r_a_c_t__r_e_s _1_6 _b_i_t_s _f_o_u_r_n_i_s_s_e_n_t _d_o_n_c _u_n_e _t_a_i_l_l_e _u_n_i_f_o_r_m_e _p_o_u_r
  _m_a_n_i_p_u_l_e_r _l_e_s _d_o_n_n__e_s _t_e_x_t_u_e_l_l_e_s_. _U_n _c_o_d_e _d_e _c_a_r_a_c_t__r_e _1_6 _b_i_t_s _a_y_a_n_t
  _t_o_u_s _l_e_s _b_i_t_s _ _0 _e_s_t _u_n _c_o_d_e _d_e _c_a_r_a_c_t__r_e _1_6 _b_i_t_s _n_u_l _(_n_u_l_l_)_, _e_t
  _t_e_r_m_i_n_e _u_n_e _c_h_a__n_e_. _L_a _v_a_l_e_u_r _d_e_s _c_a_r_a_c_t__r_e_s _l_a_r_g_e_s _p_o_u_r _c_h_a_q_u_e _m_e_m_b_r_e
  _d_u _"_P_o_r_t_a_b_l_e _C_h_a_r_a_c_t_e_r _S_e_t_" (i.e ASCII)  _e_s_t __g_a_l_e _q_u_a_n_d _i_l _e_s_t
  _u_t_i_l_i_s_ _e_n _t_a_n_t _q_u_e _s_e_u_l _c_a_r_a_c_t__r_e _d_a_n_s _u_n _c_a_r_a_c_t__r_e _e_n_t_i_e_r _(_i_n_t_e_g_e_r_)
  _c_o_n_s_t_a_n_t_. _L_e_s _c_o_d_e_s _d_e _c_a_r_a_c_t__r_e_s _1_6 _b_i_t_s _p_o_u_r _l_e_s _a_u_t_r_e_s _c_a_r_a_c_t__r_e_s
  _d__p_e_n_d_e_n_t _d_e_s _l_o_c_a_l_e_s _e_t _d_e _l_'_i_m_p_l__m_e_n_t_a_t_i_o_n_.  _L_e_s _o_c_t_e_t_s
  _m_o_d_i_f_i_c_a_t_e_u_r_s _d_'__t_a_t _n_'_o_n_t _p_a_s _d_e _r_e_p_r__s_e_n_t_a_t_i_o_n _e_n _c_o_d_e _d_e _c_a_r_a_c_t__r_e
  _1_6 _b_i_t_s_.

  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.


     GGNNUU gglliibbcc--22..00..xx,, gglliibbcc--22..11..x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.

     SSoollaarriiss 22..7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.

     OOSSFF//11 44..00dd

       <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.

     IIrriixx 66..5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.

     HHPP--UUXX 1111..0000

       <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.

     AAIIXX 44..2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 :

  _P_o_u_r _i_n_t_e_r_n_a_t_i_o_n_a_l_i_s_e_r _c_o_r_r_e_c_t_e_m_e_n_t _u_n_e _a_p_p_l_i_c_a_t_i_o_n _u_t_i_l_i_s_e_z _l_e_s
  _i_n_d_i_c_a_t_i_o_n_s _s_u_i_v_a_n_t_e_s _:
  1. __v_i_t_e_z _l_'_a_c_c__s _d_i_r_e_c_t _ _U_n_i_c_o_d_e_. _C_e_c_i _e_s_t _l_a _t__c_h_e _d_e _l_a _c_o_u_c_h_e
     _d_'_i_n_t_e_r_n_a_t_i_o_n_a_l_i_s_a_t_i_o_n _d_e _l_a _p_l_a_t_e_f_o_r_m_e_.

  2. _U_t_i_l_i_s_e_z _l_e _m_o_d__l_e_s _P_O_S_I_X _p_o_u_r _l_e_s _i_n_t_e_r_f_a_c_e_s _m_u_l_t_i_-_o_c_t_e_t_s _e_t _
     _c_a_r_a_c_t__r_e_s _1_6 _b_i_t_s_.

  3. _A_p_p_e_l_e_z _s_e_u_l_e_m_e_n_t _l_e_s _f_o_n_c_t_i_o_n_s _d_e _l_'_A_P_I _q_u_e _l_a _c_o_u_c_h_e
     _d_'_i_n_t_e_r_n_a_t_i_o_n_a_l_i_s_a_t_i_o_n _f_o_u_r_n_i_t _p_o_u_r _l_a _l_a_n_g_u_e _e_t _l_e_s _o_p__r_a_t_i_o_n
     _s_p__c_i_f_i_q_u_e_s _ _l_a _c_u_l_t_u_r_e_.

  4. _R_e_s_t_e_z _i_n_d__p_e_n_d_a_n_t _d_e _l_'_e_n_c_o_d_a_g_e_.

  Si, pour une raison quelconque, vous devez vraiment supposer que
  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.


  55..11..11..22..  LLaa bbiibblliiootthhqquuee lliibbuuttff88

  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.


  55..11..11..33..  LLaa mmtthhooddee PPllaann99

  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.




  55..11..22..  PPoouurr lleess iinntteerrffaacceess uuttiilliissaatteeuurr ggrraapphhiiqquueess

  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.


  55..11..33..  PPoouurr llaa mmaanniippuullaattiioonn ddee tteexxttee aavvaannccee

  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.


     uuccddaattaa--11..9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.


     IICCUU
        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.


     lliibbuunniiccooddee
        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.


  55..11..44..  PPoouurr llaa ccoonnvveerrssiioonn

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


  55..11..44..11..  LL''iimmppllmmeennttaattiioonn iiccoonnvv dd''UUllrriicchh DDrreeppppeerr,, ccoonntteennuuee ddaannss llaa
  GGNNUU gglliibbcc--22..22..1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.


  55..11..44..22..  lliibbrreeccooddee ppaarr FFrraannooiiss PPiinnaarrdd

  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.


  55..11..55..  LLeess aauuttrree aapppprroocchheess


     lliibbuuttff--8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5..22..  JJaavvaa

  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._l_a_n_g_u_a_g_e 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5..33..  LLiisspp

  Le standard Lisp ordinaire dtermine deux types de caractres :
  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 L'encodage utilis pour les
  entres/sorties sur un fichier peut tre dfini  travers une
  combinaison des arguments de 'open'
  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5..44..  AAddaa9955

  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.

