Les gens de diff�rents pays utilisent diff�rents caract�res pour repr�senter 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 caract�res 8-bits. Ils peuvent donc traiter et afficher du texte correctement � condition qu'il soit repr�sent� dans un jeu de caract�res 8-bits, comme ISO-8859-1.
Il y a bien plus de 256 caract�res dans le monde - pensez au cyrillique, � l'h�breu, � l'arabe, au chinois, au japonais au cor�en et au tha� -, et de temps � autres, de nouveaux caract�res sont invent�s. Les probl�mes que cela induit pour les utilisateurs sont les suivants :
La solution � ce probl�me est l'adoption d'un jeu de caract�res
universel. Ce jeu de caract�res 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).
Cela r�duit le probl�me de l'utilisateur (devoir jongler entre diff�rents jeux de caract�res) � un probl�me technique : comment transporter les caract�res 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� utilis�e par les connexions r�seau TCP/IP. Cependant, l'utilisation d'un octet pour la repr�sentation d'un caract�re est un accident de l'histoire d� au fait que le d�veloppement de l'ordinateur commen�a en Europe et aux �tats-Unis, o� l'on pensait que 96 caract�res seraient suffisants pour longtemps.
Il y a fondamentalement quatre fa�ons d'encoder des caract�res Unicode dans des octets :
128 caract�res sont encod�s en utilisant 1 octet : les caract�res
ASCII.
1920 caract�res sont encod� en utilisant deux octets : le
latin, le grec, le cyrillique, le copte, l'arm�nien, l'h�breu, les
caract�res arabes.
63488 caract�res sont encod�s en utilisant 3 octets, le chinois et le
japonais entre autres.
Les 2147418112 caract�res restant (non encore
assign�s) peuvent �tre encod�s en utilisant 4, 5 ou 6 caract�res.
Pour plus d'informations sur UTF-8, faites man 7 utf-8
(cette
page est contenue dans le package ldpman-1.20).
Chaque caract�re est repr�sent� par deux octets. Cet encodage peut repr�senter seulement les 65536 premiers caract�res d'Unicode.
C'est une extension d'UTF-2 qui peut repr�senter 11144112 caract�res Unicode. Les 65536 premiers caract�res sont repr�sent�s par deux octets, les autres par quatre.
Chaque caract�re est repr�sent� par 4 octets.
L'espace n�cessaire pour encoder un texte, comparativement aux encodages actuellement en usage (8 bits par caract�res pour les langues europ�ennes, plus pour le chinois/japonais/cor�en), est le suivant : (Cela a une influence sur l'espace disque, et la vitesse des communications r�seau.
Pas de changement pour l'ASCII am�ricain, juste quelques pourcents suppl�mentaires pour ISO-8859-1, 50 % de plus pour le chinois/japonais/cor�en, 100 % de plus pour le grec et le cyrillique.
Pas de changement pour le chinois/japonais/cor�en, augmentation de 100 % pour l'US ASCII et ISO-8859-1, le grec et le cyrillique.
Augmentation de 100% pour le chinois/japonais/cor�en. De 300% pour l'US ASCII et ISO-8859-1, le grec et le cyrillique.
�tant donn� la p�nalit� pour les documents am�ricains et europ�ens, caus�e 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 pr�dominant au Japon.
D'un autre c�t� UTF-8 a le potentiel pour une utilisation � large
�chelle, puisqu'il ne p�nalise pas les utilisateurs am�ricains et
europ�ens, et que beaucoup de logiciels de "traitement de texte" (NDT :
au sens large) n'ont pas besoin d'�tre chang�s pour supporter UTF-8.
Nous allons maintenant expliquer comment configurer votre syst�me Linux
pour qu'il utilise UTF-8 comme encodage de texte.
L'approche de Microsoft Win32 rend facile pour les d�veloppeurs la
production de versions Unicode de leurs programmes :
Vous d�finissez Unicode ("#define UNICODE") au d�but de votre
programme, et changez alors un grand nombre d'occurrences de
char
en TCHAR
jusqu'� ce que votre programme compile
sans Warnings.
Le probl�mes 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 repr�sentation interne des nombre (``the endianness''). Le registre de syst�mes de codage de caract�res de la IANA dit � l'�gard de ISO-10646-UCS-2 : "il faut sp�cifier l'ordre de la repr�sentation interne des nombres � l'int�rieur du r�seau, le standard ne le sp�cifie pas". Cette repr�sentation est "big endian" en contexte r�seau, alors que Microsoft recommande dans ses outils de d�veloppement C/C++ d'utiliser une repr�sention d�pendante de la machine (c.a.d. "little endian" sur les processeurs ix86), et d'ajouter une marque de polarit� (BOM) au d�but du document, ou d'utiliser des heuristiques bas�es sur la statistique.
D'un autre c�t� l'approche de UTF-8 garde char*
comme type
standard pour le stockage des cha�nes en C. Il en r�sulte que votre
programme supportera l'US ASCII, ind�pendamment de toute variable
d'environnement, et supportera les textes encod�s en ISO-8859-1 et
UTF-8 � condition que la variable d'environnement LANG soit
positionn�e en cons�quence.
La liste de ressources de Markus Kuhn (mise � jour tr�s r�guli�rement) :
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 :
quickbrown.txt
, utf-8-test.txt
,
utf-8-demo.txt
dans le r�pertoire examples
dans le
package ucs-fonts de Markus Kuhniso10646
dans le package trans-1.1.1 de Kosta KostiNous supposons que vous avez d�j� 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 pla�t, ne suivez pas le conseil donn� dans le Thai-HOWTO vous disant de faire croire que vous utilisez des caract�res ISO-8859-1 (U0000..U00FF) alors que vous tapez des caract�res Thai (U0E01..U0E5B). Faire cela ne vous causera que des probl�mes lorsque vous passerez � Unicode.
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 d�pourvues 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 r�pertoire 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 interpr�t�e comme de l'UTF-8. De plus, le clavier est mis en
mode Unicode (voir "man kbd_mode"). Dans ce mode, les caract�res
Unicode tap�s par Alt-x1...Alt-xn (o� x1...xn sont les chiffres de
pav� num�rique) seront �mis en UTF-8. Si votre clavier, ou plus
pr�cis�ment, votre keymap a des touches correspondant � des
caract�res 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 caract�res de diff�rents
alphabets sur le m�me �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'h�breu, 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
ex�cutez
/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.
N'h�sitez pas � installer des fontes cyrilliques, chinoises, japonaises, etc. M�me 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 �trang�res si elles sont disponibles.
Les programmes suivants sont utiles pour installer des fontes :
Les fontes suivantes sont disponibles gratuitement (liste non exhaustive) :
Les applications qui souhaitent pouvoir afficher du texte utilisant diff�rentes alphabets (comme le cyrillique et le grec) en m�me temps, peuvent le faire en utilisant les diff�rentes fontes X pour chaque partie de texte. C'est ce que font Netscape Communicator et Java. Cependant, cette approche est plus compliqu�e, 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 m�mes dimensions.
$ 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
xterm fait partie de X11R6 et XFree86, mais il est maintenu
s�par�ment 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 caract�res
Unicode que l'application renvoie comme une s�quence d'octets UTF-8.
Pour obtenir un xterm UTF-8 fonctionnel, vous devez :
$ cd .../ucs-fonts
$ cat quickbrown.txt
$ cat utf-8-demo.txt
Vous devriez voir (entre autre) des caract�res grecs et cyrilliques.
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.
Vous pouvez maintenant utiliser n'importe quel caract�re Unicode dans les noms de fichiers. Ni le kernel ni aucun utilitaire syst�me ne n�cessite 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 d�limiter les sous-r�pertoires). Quand ils sont encod�s en utilisant UTF-8, les caract�res non-ASCII ne seront jamais encod�s en utilisant un octet nul ou un slash. La seule cons�quence est que les noms de fichiers et de r�pertoires occupent plus d'octets qu'ils ne contiennent de caract�res. Par exemple, un nom de fichier contenant cinq caract�res grecs appara�tra 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 affich�s en grec.
C'est une th�orie g�n�rale, qui est vraie tant que vos fichiers restent
sur un syst�me Linux.
Sur les syst�mes de fichiers utilis�s depuis d'autres
syst�mes d'exploitation, mount
poss�de des options pour contr�ler la
conversion des noms de fichiers de/vers UTF-8 :
Les autres syst�mes de fichiers (nfs, smbfs, ncpfs, hpfs, etc.) ne convertissent pas les noms de fichiers. Par cons�quent ils accepteront les noms de fichier Unicode encod�s en UTF-8 seulement si l'autre syst�me d'exploitation les supporte. Rappelez vous que pour qu'une option de montage soit appliqu�e aux prochains montages, vous devez l'ajouter � la quatri�me colonne de la ligne correspondante dans /etc/fstab.
Les ttys sont en quelque sorte des tubes bidirectionnels entre deux programmes, autorisant des choses comme la r�p�tition (echoing) ou l'�dition de la ligne de commande. Quand dans un xterm, vous ex�cutez la commande "cat" sans arguments, vous pouvez entrer et �diter autant de lignes que vous voulez, elles seront r�p�t�es 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 trait�es correctement.
Pour r�soudre ce probl�me, vous devez :
stty
. Testez le
ensuite en utilisant stty -a
et stty iutf8
.
stty iutf8
au script unicode_start, et la
commande stty -iutf8
au script unicode_stop.
xterm -u8
/ xterm +u8
et en lan�ant stty -a
et un cat
interactif � l'int�rieur.Pour que ce changement soit persistant m�me � travers rlogin et telnet, vous devrez aussi :
$ tic linux-utf8 . terminfo
$ tic xterm-utfu . terminfo
sur un compte utilisateur (cela cr�era les entr�es terminfo dans votre
repertoir $HOME/.terminfo).
Voil�
linux-utf8.terminfo et
xterm-utf8.terminfo. 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 diff�rents encodages sur la m�me 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 tr�s pratiques, appel�s "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 install�s, 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 syst�mes Linux r�cents), 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 donn�es existent, mais ils sont
moins puissants que GNU recode. Ce sont
Vous pouvez avoir les variables d'environnement suivantes positionn�es, contenant les noms de locales :
Remplacement pour LC_MESSAGES. Seulement utilis� par GNU gettext.
Remplacement pour toute les autres variables LC_* :
Ce sont des variables individuelles pour : le type des caract�res et leur encodage, les messages en langue maternelle, les r�gles de classement, le format des nombres, le format des montants mon�taires, l'affichage de la date et de l'heure.
Valeur par d�faut pour toutes les variables LC_*
man 7 locale
' pour une description d�taill�e.)
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 d�signe une table de caract�res, 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, s�par�s par deux points (:).
Pour dire � votre syst�me 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
Si vous avez la glibc-2.1 ou glibc-2.1.1 ou glibc-2.1.2 install�e, v�rifiez d'abord en utilisant "localedef -help" que le r�pertoire syst�me pour le tables de caract�res 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 cr�ez 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
G�n�ralement vous n'avez pas besoin de cr�er des variables appel�es "de" ou "fr" sans suffixe pour le code du pays, parce que ces locales sont normalement utilis�es seulement par la variable LANGUAGE, et pas par les variables LC_*. De plus LANGUAGE est seulement utilis� en remplacement de LC_MESSAGES.
La glibc-2.2 supportera les locales multi-octets (de plusieurs
octets), en particulier les
locales UTF-8 cr��es plus haut. Mais les glibc-2.1 et 2.1.1 ne la
supportent pas r�ellement. Par cons�quent le seul effet r�el de la
cr�ation des fichiers /usr/local/share/de_DE.UTF-8/* ci dessus est que
setlocale(LC_ALL,"")
retournera "de_DE.UTF-8", conform�ment � 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 biblioth�que '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 biblioth�que install�e :
export LD_PRELOAD=/usr/local/lib/libutf8_plug.so
Alors, dans chaque programme lanc� avec cette variable d'environnement
positionn�e, les fonctions de libutf8_plug.so seront appel�es � 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 n�cessaire quand la glibc-2.2 sortira.
Maintenant ajoutons un contenu � ces nouvelles locales. Les commandes
/bin/sh suivantes convertiront vos catalogues de messages au format
UTF-8. Elles doivent �tre lanc�es en tant que root, et n�cessitent les
programmes 'msgfmt' et 'msgunfmt' de GNU gettext-0.10.35
convert-msgcat.sh.
Ceci non plus ne sera plus n�cessaire une fois que la glibc-2.2 sera
sortie, parce qu'alors la fonction gettext convertira les cha�nes de
caract�res de fa�on appropri�e depuis la table de caract�res du
traducteur vers la table de caract�res de l'utilisateur, en
utilisant soit iconv soit librecode.
Marche bien avec les patches mentionn�s pr�c�demment.
Telnet n'est pas ne traite pas les caract�res 8-bits (il n'est pas"8-bit-clean") par d�faut. Pour pouvoir envoyer des codes de touches Unicode � un h�te distant, vous devez mettre telnet en mode "outbinary". Il y a deux fa�ons de faire cela :
$ telnet -L <hote>
et
$telnet
telnet> set outbinary
telnet> open <hote>
en outre, utilisez les patches mentionn�s pr�c�demment.
Netscape 4.05 ou plus peut afficher des documents HTML en encodage UTF-8. Tout ce qu'un document n�cessite est la ligne suivante, situ�e 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 2.8 a un �cran d'options (touche 'O') qui permet de s�lectionner la table de caract�res utilis�e � l'affichage. Quand il, tourne dans un xterm ou depuis une "Linux console" en mode UTF-8, s�lectionnez "UNICODE UTF-8".
Maintenant, encore une fois, tout ce qu'un document n�cessite 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 encod�s 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 caract�res suppos� par d�faut ("assumed document character set") en "utf-8".
Il y a aussi, dans l'�cran d'options, une option permettant de choisir le jeu de caract�res par d�faut ("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 probl�me 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 caract�res pour l'affichage � �t� positionn� � "UNICODE-UTF-8". Ce probl�me est r�solu par le patch lynx282.diff.
D'apr�s les d�veloppeurs de lynx : "Pour une utilisation s�rieuse de
l'affichage UTF-8 avec Lynx, il est toujours recommand� de compiler avec la
biblioth�que 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/
Des pages de test pour les navigateurs peuvent �tre trouv�es sur les
pages d'Alan Wood et James Kass :
http://www.hclrss.demon.co.uk/unicode/#links,
http://home.att.net/~jameskass/
Le programme yudit
de G�sp�r Sinai
http://czyborra.com/yudit/
est un �diteur de texte unicode de premier ordre pour le syst�me X
Window.
Il supporte le traitement simultan� de beaucoup de langages, m�thodes
d'entr�e, conversions de caract�res locaux standards.
Il est �quip� pour supporter l'entr�e 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� tr�s 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 m�thode d'entr�e. Les m�thodes "Straight", "Unicode" et "SGML" sont les plus int�ressantes. Pour avoir des d�tails sur les autres m�thodes d'entr�es incorpor�es, regardez dans "/usr/local/share/yudit/data/".
Pour qu'un changement devienne un r�glage par d�faut pour les prochaines sessions, �ditez votre fichier $HOME/.yuditrc.
Les fonctionnalit�s g�n�rales de l'�diteur sont limit�es � l'�dition, le copier-coller, et le "chercher-remplacer" (search&replace). Pas de fonction d'annulation (undo).
mined98
est un petit �diteur de texte de Michiel Huisjes, Achim M�ller
et Thomas Wolff :
http://www.inf.fu-berlin.de/~wolff/mined.html.
Il vous permet d'�diter des fichier encod�s en UTF-8 ou 8 bits, dans un
xterm UTF-8 ou 8-bits.
Il dispose aussi de puissantes fonctionnalit�s pour entrer les
caract�res 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 encod�s aussi bien en UTF-8
qu'en 8-bits. Par d�faut il utilise un heuristique d'auto-d�tection.
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'interpr�tation � 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 caract�res pour le changer.
Quelques b�mols :
ESC h
le trouve.
-B
de fa�on � ce que la touche
backspace efface le caract�re � gauche du curseur.
vim
(depuis la version 5.4m) supporte les locales multi-octets, mais
seulement si la biblioth�que X a le m�me support, et seulement pour
les encodages avec au moins deux octets par caract�res, i.e les encodages
ISO-2022. Il ne supporte pas l'UTF-8.
Avant tout, vous devriez lire la section "International Character Set Support" (noeud "International") dans le manuel d'Emacs. En particulier, notez que vous devez d�marrer Emacs avec la commande
$ emacs -fn fontset-standard
pour qu'il utilise un jeu de fontes comprenant beaucoup de caract�res
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. Apr�s 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, gr�ce 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 fen�tre, pas en mode terminal.
Richard Stallman pr�voit � long terme d'ajouter un support d'UTF-8 int�gr� � Emacs.
(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 sugg�re, il est pr�vu pour XEmacs-21. J'ai eu besoin d'aider un peu 'patch'. La diff�rence 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 premi�re chose que j'ai faite fut ceci.
Ce code cherche une ligne de mode sp�ciale commen�ant 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 s�lectionne. 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 d�fini une macro pour \u03BB (lambda grec) comme ceci :
(defmacro \u03BB (x) '(lambda .,x))
En th�orie, xedit
devrait �tre capable d'�diter des fichiers UTF-8 si
vos locales sont configur�es en cons�quence (voir au dessus), et que
vous ajoutez la ligne "Xedit*international: true" � votre fichier
$HOME/.Xdefaults.
En pratique, il reconna�tra les encodages UTF-8 des caract�res non
ASCII, mais il les affichera comme des s�quences de caract�res "@".
En th�orie, axe
devrait �tre capable d'�diter des fichiers UTF-8 si
vos locales sont configur�es en cons�quence (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.
Les distributions de teTex 0.9 (et sup�rieures) contiennent une adaptation Unicode de TeX, appel�e Omega ( http://www.gutenberg.eu.org/omega/ ftp://ftp.ens.fr/pub/tex/yannis/omega), mais est-ce que quelqu'un conna�trait un tutorial sur ce syst�me ?
Autres liens peut-�tre en rapport :
http://www.dante.de/projekte/nts/NTS-FAQ.html,
ftp://ftp.dante.de/pub/tex/language/chinese/CJK/
MIME : RFC 2279 d�finit les jeux de caract�res 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 consid�r�e comme �tant obsol�te ("deprecated") et ne devrait plus �tre utilis�e.
Les clients mail sortis apr�s le 1er janvier 1999 devraient �tre capables d'envoyer et d'afficher des courriers encod�s en UTF-8, sous peine d'�tre consid�r�s 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 impl�mentent 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") :
La situation pour une version non patch�e de pine 4.10 est la suivante.
Pine ne fait pas de conversion de jeu de caract�res. Mais il vous permet de voir des courriers UTF-8 dans une fen�tre texte UTF-8 (console Linux ou xterm).
Normalement, Pine se plaindra du fait qu'il y a diff�rents jeux de caract�res � chaque fois que vous visualiserez un courrier encod� en UTF-8. Pour vous d�barrasser de cet avertissement, choisissez S (setup), puis C (config), et changez la valeur de "character set" � UTF-8. Cette option ne fera rien � part r�duire le nombre d'avertissements, puisque Pine ne conna�t pas UTF-8 en interne.
Notez aussi que pour Pine la notion de caract�res Unicode est tr�s limit�e : il affichera les caract�res latins et grecs, mais ce sont les seuls types de caract�res Unicode qu'il conna�t.
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 d�coder et afficher les ent�tes et le corps des messages correctement. Ce patch n�cessite GNOME libunicode http://cvs.gnome.org/lxr/source/libunicode/.
Kmail (comme tout KDE 1.0) ne contient absolument aucun support pour les mails en UTF-8.
Le Messenger de Netscape Communicator peut envoyer et afficher des mails encod�s en UTF-8, mais cela n�cessite quelques interventions manuelles de l'utilisateur.
Pour envoyer un mail encod� en UTF-8 : apr�s avoir ouvert la fen�tre "Compose", mais avant de commencer � composer le message, s�lectionnez 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 m�me pas un indice visuel montrant que le courrier a �t� encod� en UTF-8. Vous devez s�lectionner manuellement l'option ad�quate dans "View -> Character Set -> Unicode (UTF-8)". Pour afficher les courriers UTF-8, Netscape utilise des fontes diff�renci�es. Vous pouvez ajuster la fonte utilis�e dans la bo�te de dialogue "Edit -> Preferences -> Fonts". Choisissez la cat�gorie de fontes "Unicode".
Tel�chargez 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, v�rifiez
aussi que le fichier vers lequel elle pointe ne d�finit pas
LESSCHARSET.
Si n�cessaire, r�g�n�rez ce fichier en utilisant la commande
'lesskeys', ou enlevez la variable d'environnement LESSKEYS.
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
r�pertoires o� libutf8 est install�, puis recompilez.
Procurez vous le package util-linux-2.9y, configurez le, puis d�finissez 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 r�pertoires o� libutf8 est install�. Puis recompilez.
Figlet 2.2 a une option pour g�rer l'entr�e en UTF-8 : "figlet -C utf-8".
Le programme de communication s�rie C-Kermit http://www.columbia.edu/kermit/, dans les versions 7.0beta10 et sup�rieures, comprend les encodages de fichier et de transfert UTF-8 et UCS-2, et l'encodage de terminal UTF-8. La documentation de ces caract�ristiques peut �tre trouv�e � ftp://kermit.columbia.edu/kermit/test/text/ckermit2.txt
La Xlib de X11 ne peut malheureusement pas encore localiser UTF-8, cela devrait �tre travaill� prochainement.
Le type C 'char
' est 8-bits et restera 8-bits parce qu'il
d�signe la plus petite unit� de donn�es adressable. Divers
am�nagements sont disponibles :
Le standard ISO/ANSI C contient, dans une correction qui fut ajout�e
en 1995, un type de caract�re cod� sur 16 bits
`wchar_t
', un ensemble de fonctions comme celles contenues
dans <string.h>
et <ctype.h>
(d�clar�es respectivement dans <wchar.h>
et
<wctype.h>
), et un ensemble de fonctions de conversion
entre `char *
' et `wchar_t *
' (d�clar�es dans
<stdlib.h>
).
Voici de bonnes r�ferences pour cette interface de programmation :
Avantages de cette interface de programmation :
setlocale(LC_ALL,"");
.Inconv�nients de cette interface de programmation :
Une variable `wchar_t
' peut �tre encod�e en Unicode ou non.
Ceci d�pend de la plateforme et quelquefois aussi des locales.
Une s�quence multi-octets `wchar_t
' peut �tre encod�e en
UTF-8 ou non selon la plateforme, et parfois selon les locales.
En d�tails, voici ce que la
Single Unix specification
dit � propos du type `wchar_t
' :
Tous les codes de caract�res 16 bits dans un processus donn� consistent en un nombre �gal de bits. Ceci en contraste avec les caract�res, qui peuvent �tre constitu�s d'un nombre variable d'octets. L'octet ou la s�quence d'octets qui repr�sentent un caract�re peuvent aussi �tre repr�sent�s comme un code de caract�re 16 bits. Les codes de caract�res 16 bits fournissent donc une taille uniforme pour manipuler les donn�es textuelles. Un code de caract�re 16 bits ayant tous les bits � 0 est un code de caract�re 16 bits nul (null), et termine une cha�ne. La valeur des caract�res larges pour chaque membre du "Portable Character Set" (i.e ASCII) est �gale quand il est utilis� en tant que seul caract�re dans un caract�re entier (integer) constant. Les codes de caract�res 16 bits pour les autres caract�res d�pendent des locales et de l'impl�mentation. Les octets modificateurs d'�tat n'ont pas de repr�sentation en code de caract�re 16 bits.
Une cons�quence notable est que dans des programmes portables vous ne
devriez pas utiliser des caract�res non-ASCII dans des cha�nes
litt�rales.
Cela signifie que m�me si vous savez que les doubles guillemets ont
les codes U+201C et U+201D, vous ne devriez pas �crire une cha�ne
litt�rale L"\u201cBonjour\u201d, dit il"
ou
"\xe2\x80\x9cBonjour\xe2\x80\x9d, dit il"
dans des programmes
C. Utilisez plut�t GNU gettext comme cela : gettext ("'Bonjour',
dit il")
, et cr�ez une base de donn�es de messages en.UTF-8.po
qui traduit "'Bonjour' dit il" en "\u201cBonjour\u201d, dit
il"
.
Voici une �tude de la portabilit� des am�nagements ISO/ANSI C sur diverses impl�mentations d'Unix. La GNU glibc-2.2 les supportera tous, mais pour l'instant nous avons le tableau suivant.
Par cons�quent je recommande l'utilisation des fonctions red�marrables et multithread-safe wcsr/mbsr. Oubliez les syst�mes 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 syst�mes 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 :
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 sp�cial de certains caract�res Unicode),
vous devriez rendre ce bout de code conditionnel selon le r�sultat 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 utilis�es.
La fonction is_locale_utf8()
est d�clar�e dans
utf8locale.h
et d�finie dans
utf8locale.c.
Une impl�mentation portable de l'API ISO/ANSI C, qui supporte les locales 8-bits et les locales UTF-8, peut �tre trouv�e dans libutf8-0.5.2.tar.gz
Avantages :
Le syst�me d'exploitation Plan9, une variante d'Unix, utilise UTF-8
comme encodage dans toutes ses applications. Son type de caract�re
large est appel� 'Rune
', pas 'wchar_
'. Des parties ce ses
biblioth�ques, �crites par Rob Pike et Howard Trikey, sont
disponibles �
ftp://ftp.cdrom.com/pub/netlib/research/9libs/9libs-1.0.tar.gz.
Une autre biblioth�que 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 biblioth�ques contient un moteur
d'expressions rationnelles qui comprend l'UTF-8.
D�savantages de cette API :
La biblioth�que 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 utilis�es.
Les biblioth�ques mentionn�es pr�c�demment impl�mentent des versions des concepts ASCII qui comprennent Unicode. Voici des biblioth�ques qui traitent des concepts Unicode, comme titlecase (Une troisi�me casse de lettres, diff�rente des majuscules et des minuscules), la distinction entre la ponctuation et les symboles, la d�composition canonique, les classes combinables, le classement canonique et d'autres choses du m�me genre.
La biblioth�que ucdata de Mark Leisher http://crl.nmsu.edu/~mleisher/ucdata.html s'occupe des propri�t�s des caract�res, de la conversion de la casse, de la d�composition, des classes combin�es.
Ce sont les classes IBM pour Unicode. http://www.alphaworks.ibm.com/tech/icu/. Une biblioth�que tr�s d�taill�e comprenant des cha�nes de caract�res 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 support�es. Cette biblioth�que est portable pour Unix et Win32, mais compilera sans intervention ("out of the box") seulement avec la libc6, pas la libc5.
La librairie Unicode de GNOME http://cvs.gnome.org/lxr/source/libunicode/ de Tom Tromey entre autres. Elle couvre la conversion du jeu de caract�res, les propri�t�s des caract�res, la d�composition.
Deux biblioth�ques de conversion qui supportent UTF-8 et un grand nombre de de jeux de caract�res 8-bits, sont disponibles :
ftp://ftp.gnu.org/pub/gnu/glibc/glibc-2.1.1.tar.gz.
Avantages :
ftp://ftp.gnu.org/pub/gnu/recode/recode-3.5.tar.gz.
Avantages :
Probl�mes :
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 :
Probl�mes :
Java supporte Unicode en interne. Le type 'char' d�signe un caract�re Unicode, et la classe 'java.lang.String' d�signe une cha�ne de caract�res construite � partir de caract�res Unicode.
Java peut afficher n'importe quel caract�re � travers son syst�me de fen�trage AWT, � condition que
Les interfaces java.io.DataInput et java.io.DataOutput contiennent des m�thodes appel�es 'readUTF', et 'writeUTF' respectivement. Mais notez qu'elles n'utilisent pas UTF-8 ; elles utilisent un encodage UTF-8 modifi� : le caract�re NUL est encod� dans une s�quence de deux octets 0xC0 et 0x80 � la place de 0x00, et un octet 0x00 est ajout� � la fin. Encod�es de cette fa�on, les cha�nes peuvent contenir des caract�res NUL mais elles doivent n�anmoins �tre pr�fix�es par un champ de taille. Les fonctions C <string.h> comme strlen() et strcpy() peuvent �tre utilis�es pour les manipuler.
Le standard Lisp ordinaire d�termine deux types de caract�res : 'base-char' et 'character'. C'est � l 'impl�mentation d'ajouter un support Unicode ou non. Ce langage d�termine aussi un mot-clef argument ':external-format' pour 'open' comme place naturelle pour sp�cifier un jeu de caract�res ou un encodage.
Parmi les impl�mentation 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 r�cente. 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 sp�cifi� par l'argument ':external-format'. Les encodages utilis�s pour les op�rations d'entr�e/sortie sur des ttys et l'encodage par d�faut pour les I/O file/socket d�pendent des locales.
Parmi les impl�mentations 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 caract�res Unicode.
L'encodage utilis� pour les entr�es/sorties sur un fichier peut �tre
d�fini � travers une combinaison des arguments de 'open'
':element-type' et :'external.format'.
Limitations : les fonctions
d'attributs de caract�res sont d�pendantes des locales. Les sources
et les fichiers de sources compil�s ne peuvent pas contenir des cha�nes
Unicode litt�rales.
L'impl�mentation commerciale du Lisp standard Allegro CL ne contient
pas encore de support Unicode, mais Erik Naggum y travaille.
Ada95 a �t� con�u pour supporter Unicode, et la biblioth�que standard Ada95 contient les types de donn�es sp�ciaux ISO 10646-1 Wide_Character et Wide_String, ainsi que de nombreuses proc�dures et fonctions associ�es. Le compilateur Ada95 GNU (gnat-3.11 ou plus) supporte UTF-8 comme encodage externe des caract�res 16 bits. Cela vous autorise � utiliser UTF-8 � la fois dans le code source et dans les entr�es/sorties de l'application. Pour l'activer dans l'application, utilisez "WCEM=8" dans la cha�ne FORM quand vous ouvrez un fichier, et utilisez l'option du compilateur "-gnatW8" si le code source est UTF-8. Pour plus de d�tails, voyez les manuels de r�f�rence GNAT et Ada95.