tuteurs.ens.fr/faq/utf8.tml

576 lines
26 KiB
Text
Raw Normal View History

2005-05-29 01:33:53 +02:00
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE html
PUBLIC "-//ENS/Tuteurs//DTD TML 1//EN"
"tuteurs://DTD/tml.dtd">
<html>
<head>
<title>UTF-8</title>
</head>
<body>
<h1>Foire Aux Questions des Tuteurs&nbsp;: Unicode, UTF-8</h1>
2005-05-29 01:33:53 +02:00
<p>Cette Foire Aux Questions (<a
href="&url.tuteurs;jargon.html#FAQ">FAQ</a>) rassemble entre autres des
questions fr<66>quemment pos<6F>es dans le courrier <20>lectronique adress<73> aux
tuteurs concernant Unicode, qui est un standard qui se r<>pand de plus en
plus, notamment dans les
distributions <a href="&url.tuteurs;jargon.html#linux">Linux</a> grand
public (et aussi sous Windows).</p>
<h2>G<>n<EFBFBD>ralit<69>s et th<74>orie</h2>
<h3><a name="unicode">Qu'est-ce que le Standard Unicode&nbsp;?</a></h3>
2005-05-29 01:33:53 +02:00
<p>Le <a href="http://www.unicode.org/">Standard Unicode</a> est produit
par une organisation <20> but non lucratif (le Consortium Unicode) ayant
pour objectif d'attribuer un num<75>ro <20> tout caract<63>re utilis<69> dans une langue
humaine. Cette entreprise vise <20> une certaine universalit<69>. Les alphabets
de <b>beaucoup</b> de langues sont d<>j<EFBFBD> inscrits dans ce standard. On y trouve
<EFBFBD>videmment les alphabets latins, grecs et cyrilliques (avec certaines de
leurs variantes, par exemple, un caract<63>re comme <20>&nbsp;&oelig;&nbsp;<3B> y figure,
2005-05-29 01:33:53 +02:00
bien qu'il ne soit pas utilis<69> dans la plupart des autres langues
europ<EFBFBD>ennes utilisant l'alphabet latin). Beaucoup de langues parl<72>es en
Asie figurent aussi dans le standard&nbsp;: des dizaines de miliers de
2005-05-29 01:33:53 +02:00
caract<EFBFBD>res chinois, japonais ou cor<6F>ens sont d<>finis. Le standard
contient bien d'autres alphabets, la consultation des tableaux de
caract<EFBFBD>res (dans la version imprim<69>e du standard ou <a
href="http://www.unicode.org/charts/">sur le site officiel</a>) est une
v<EFBFBD>ritable source d'<27>merveillement... </p>
<h3><a name="caractere">Qu'est-ce qu'un caract<63>re Unicode&nbsp;?</a></h3>
2005-05-29 01:33:53 +02:00
<p>Un caract<63>re Unicode est un caract<63>re d<>fini dans le Standard Unicode.
On y fait souvent r<>f<EFBFBD>rence par son num<75>ro <20>crit en hexad<61>cimal pr<70>c<EFBFBD>d<EFBFBD>
de <20>U+<2B>. Par exemple, la lettre latine <20>&nbsp;a&nbsp;<3B> correspond <20> U+0061, la lettre
cyrillique <20>&nbsp;&#x042f;&nbsp;<3B> correspond <20> U+042F et le "DEVANAGARI OM"
<EFBFBD>&nbsp;&#x0950;&nbsp;<3B> correspond <20> U+0950. Certains de ces caract<63>res ne
2005-05-29 01:33:53 +02:00
s'affichent peut-<2D>tre pas correctement sur votre <20>cran, cela d<>pend de
plusieurs param<61>tres, nous reviendrons sur ce point dans les questions
suivantes&nbsp;; il faut cependant garder une chose <20> l'esprit, le Standard
Unicode d<>finit des listes de caract<63>res, donne un nom <20> chaque
caract<EFBFBD>re (pour <20>&nbsp;a&nbsp;<3B>, c'est "LATIN SMALL LETTER A"), mais en aucun
2005-05-29 01:33:53 +02:00
cas, le glyphe devant repr<70>senter chaque caract<63>re n'est normalis<69>, en
effet, plusieurs fontes de caract<63>res peuvent <20>tre utilis<69>es.</p>
<h3><a name="utf8">Qu'est-ce que <20>&nbsp;UTF-8&nbsp;<3B>&nbsp;?</a></h3>
2005-05-29 01:33:53 +02:00
<p>"UTF" est form<72> des initiales de "Unicode Transformation Format".
Les ordinateurs stoquent et <20>changent leurs donn<6E>es le plus souvent sous
forme de suite d'octets, un octet <20>tant constitu<74> 8 bits. Un octet peut
donc se <20>tre repr<70>sent<6E> comme un nombre entier compris (au sens large)
entre 0 et 255. Si on veut stoquer sur un support informatique
un texte constitu<74> de caract<63>res Unicode, il faut choisir un
proc<EFBFBD>d<EFBFBD> transformant une suite de caract<63>res Unicode en une suite
d'octets et r<>ciproquement avoir un proc<6F>d<EFBFBD> pour retrouver la suite de
caract<EFBFBD>res <20> partir d'une suite d'octets bien form<72>e, ces donn<6E>es
constituent ce que l'on appelle un <a
href="&url.tuteurs;theorie/encodages.html">encodage</a>.
</p>
<p>L'encodage le plus pratique pour <20>changer des textes constitu<74>s de
caract<EFBFBD>res Unicode est UTF-8. Il associe <20> tout num<75>ro Unicode
une suite d'un ou plusieurs octets (jusqu'<27> quatre octets pour un seul
caract<EFBFBD>re). Cet encodage est d<>crit dans la <a
href="http://www.faqs.org/rfcs/rfc2279.html">RFC 2279</a>.
Une des propri<72>t<EFBFBD>s importantes de cet encodage est que les caract<63>res
dont les num<75>ros sont compris entre 32 et 126 poss<73>dent la m<>me
repr<EFBFBD>sentation en UTF-8 et dans l'encodage ASCII. L'encodage UTF-8 est
donc compatible avec ASCII, dans la mesure o<> il n'y a rien <20> faire pour
convertir un fichier encod<6F> en ASCII vers UTF-8. R<>ciproquement, si un
octet repr<70>sentant un nombre compris entre 32 et 126 appara<72>t dans un
fichier encod<6F> en UTF-8, alors c'est forc<72>ment pour encoder le caract<63>re
ASCII du m<>me num<75>ro.</p>
<h3>Quels types de logiciels g<>rent Unicode&nbsp;?</h3>
<p>
La question de savoir si un logiciel g<>re bien Unicode n'a de sens que
si celui-ci manipule du texte. Les logiciels les plus concern<72>s sont
notamment les <a href="#editeurs"><3E>diteurs de texte</a>,
les logiciels de traitement de texte,
les logiciels de <a href="#courrier">courrier <20>lectronique</a>
et les <a href="#test-navigateur">navigateurs Web</a>.
</p>
<h2><a name="terminaux">Terminaux Unicode</a></h2>
<h3>Qu'est-ce qu'un terminal Unicode&nbsp;?</h3>
2005-05-29 01:33:53 +02:00
<p>Un terminal (ou un <20>mulateur de terminal) consiste en une interface
qui permet de saisir et d'afficher du texte, divers programmes peuvent
<EFBFBD>&nbsp;tourner&nbsp;<3B> <20> l'int<6E>rieur de ce terminal&nbsp;: un interpr<70>teur
de commandes (<em>shell</em>), un logiciel pour g<>rer ses mails, un
<EFBFBD>diteur de texte, etc... Le terminal et les programmes qui tournent <20>
l'int<6E>rieur d'icelui doivent se mettrent d'accord d'une mani<6E>re ou d'une
autre pour savoir dans quel encodage le texte doit communiquer entre eux,
et ce de fa<66>on coh<6F>rente avec les caract<63>res effectivement
affich<EFBFBD>s <20> l'<27>cran et le texte saisi par l'utilisatuer.</p>
<p> Un terminal Unicode (ou UTF-8) est un terminal o<> cet encodage est
UTF-8, par opposition aux terminaux <20>&nbsp;ordinaires&nbsp;<3B> o<> l'encodage
est mono-octet (c'est-<2D>-dire ne permet de repr<70>senter qu'un peu moins de
256 caract<63>res diff<66>rents), le plus souvent <code>latin-1</code> en
France. </p>
<p>
Dans un terminal Unicode, on peut ainsi afficher beaucoup plus de
caract<EFBFBD>res diff<66>rents que dans un terminal <code>latin-1</code>. Cela
reste n<>anmoins une interface en mode texte, on ne pourra ainsi pas
afficher correctement du texte dans des langues dont l'<27>criture utilise
des syst<73>mes de ligatures complexes&nbsp;; pour le reste, cela
fonctionne tr<74>s bien. Il y a quelques subtilit<69>s, les caract<63>res
chinois/japonais/cor<6F>ens occupent ainsi deux cases contigu<67>s au lieu
d'une seule.
</p>
<h3><a name="uxterm">Comment lancer un terminal Unicode&nbsp;?</a></h3>
2005-05-29 01:33:53 +02:00
<p>Il existe beaucoup d'<27>mulateurs de terminaux sous Unix, certains
savent g<>rer Unicode, d'autres non. Le programme
de r<>f<EFBFBD>rence <code>xterm</code> sait faire, pour le lancer de fa<66>on <20>
obtenir un terminal Unicode, le plus commode est d'utiliser la commande
<code>uxterm</code> qui est en g<>n<EFBFBD>ral un script qui lance
<code>xterm</code> avec les bonnes options.
</p>
<p>Sous Windows, notons que le programme <a
href="http://www.chiark.greenend.org.uk/~sgtatham/putty/">PuTTY</a> qui
est <20> la fois un client SSH et un <20>mulateur de terminal sait g<>rer
Unicode, il suffit de choisir UTF-8 comme encodage.
</p>
<div class="ens">
Dans les <a href="&url.config;">configs conscrits</a> r<>centes, <20> partir
du Menu, on peut cliquer sur <20>&nbsp;Fen<65>tres&nbsp;<3B> puis sur
<EFBFBD>&nbsp;Terminal Unicode&nbsp;<3B>.
</div>
<h3><a name="test">Comment savoir si je suis dans un terminal
Unicode&nbsp;?</a></h3>
<p>
La mani<6E>re la plus rapide est probablement de taper la suite de
touches
<EFBFBD>xxd<code>&lt;Enter&gt;&lt;Compose&gt;&lt;apostrophe&gt;</code>e<code>&lt;Enter&gt;&lt;Control-D&gt;</code><3E>.
Autrement dit, on lance le programme <code>xxd</code> qui va servir <20>
afficher la repr<70>sentation en hexad<61>cimal du texte que l'on va
saisir&nbsp;: on saisit un e accent aigu avec la touche compose,
on valide et on ferme avec <code>&lt;Control-D&gt;</code>. Si on se trouve dans
un terminal <code>latin-1</code>, on va voir&nbsp;:
2005-05-29 01:33:53 +02:00
</p>
<pre><span class="prompt">clipper ~ $</span>&nbsp;xxd
<EFBFBD>
0000000: e90a ..
</pre>
<p class="continue">tandis que dans un terminal Unicode, on
verra&nbsp;:</p>
<pre>
<span class="prompt">clipper ~ $</span>&nbsp;xxd
<EFBFBD>
0000000: c3a9 0a ...
</pre>
<p class="continue">Le <code>0a</code> que l'on voit dans les deux
r<EFBFBD>sultats repr<70>sente le caract<63>re <code>U+00A0</code> LINE FEED (LF) qui
s'encode de la m<>me mani<6E>re en <code>latin-1</code> et en UTF-8. La
diff<EFBFBD>rence porte donc sur l'encodage du caract<63>re <code>U+00E9</code> LATIN
SMALL LETTER E WITH ACUTE (le e accent aigu), en
<code>latin-1</code>, on le
repr<EFBFBD>sente par un seul octet de valeur hexad<61>cimale <code>e9</code>
tandis qu'en UTF-8, on a deux octets&nbsp;: <code>c3</code> puis
<code>a9</code>.
</p>
<p>
Une autre mani<6E>re de le d<>terminer consiste <20> utiliser la sortie du
terminal plut<75>t que son entr<74>e. On va envoyer sur la sortie la
repr<EFBFBD>sentation en UTF-8 du e accent aigu, si on voit effectivement un e
accent aigu, on sera dans un terminal UTF-8, si on voit deux caract<63>res
qui n'ont rien <20> voir (en l'occurence <20>é<EFBFBD>), cela voudra probablement
dire que l'on est dans un terminal <code>latin-1</code>.
Pour faire ce test, on peut
utiliser la commande suivante&nbsp;:
</p>
<pre><span class="prompt">clipper ~ $</span>&nbsp;printf '\xc3\xa9\n'
</pre>
<h3><a name="locales">Comment faire fonctionner des
programmes dans un terminal Unicode&nbsp;?</a></h3>
<p>
La seule m<>thode vaguement standardis<69>e pour sp<73>cifier aux programmes
dans quel encodage est encod<6F> le terminal dans lequel ils fonctionnent
est donn<6E> par les <em>locales</em>. Pour conna<6E>tre le r<>glage des
<em>locales</em> que les
programmes vont subir, on peut utiliser la commande <code>locale</code>
(qui existe au moins sous GNU/Linux et sous Solaris). Dans un terminal
Unicode, j'obtiens ceci&nbsp;:</p>
<pre><span class="prompt">clipper ~ $</span>&nbsp;locale
LANG=
LC_CTYPE=fr_FR.UTF-8
LC_NUMERIC="C"
LC_TIME="C"
LC_COLLATE="C"
LC_MONETARY="C"
LC_MESSAGES="C"
LC_ALL=
</pre>
<p class="continue">Ce qui est important ici, c'est ce qui figure en face
de <code>LC_CTYPE</code>. La valeur <code>fr_FR.UTF-8</code> signifie en gros
que j'utilise du fran<61>ais de France (et non du fran<61>ais de Suisse par
exemple) <em>encod<6F> en UTF-8</em>. Si <code>LC_CTYPE</code> contenait
une valeur n'indiquant pas un encodage UTF-8, comme <code>C</code>,
<code>en_US</code> ou encore <code>fr_FR</code>, je pourrais changer
cette locale en tapant la commande suivante qui permet de modifier la
variable d'environnement <code>LC_CTYPE</code>&nbsp;:
</p>
<pre>
<span class="prompt">clipper ~ $</span>&nbsp;LC_CTYPE=fr_FR.UTF-8;export LC_CTYPE
</pre>
<p class="continue">La modification s'appliquera pour les applications
lanc<EFBFBD>es par la suite dans ce terminal. La variable d'environnement
<code>LC_MESSAGES</code> peut <20>galement <20>tre utile, elle indique aux
programmes qui en sont conscients dans quelle langue on souhaite qu'ils
nous parlent. Par exemple, si on est dans un terminal Unicode et que
l'on a d<>fini les variables d'environnement <code>LC_CTYPE</code> et
<code>LC_MESSAGES</code> <20> <code>fr_FR.UTF-8</code>,
les messages qu'affichera un logiciel de courrier <20>lectronique comme
<a
href="&url.tuteurs;internet/courrier/mail-mutt.html"><code>mutt</code></a>
seront en fran<61>ais.</p>
<h3><a name="ssh">Quand je me logue par <code>ssh</code>, les caract<63>res
accentu<EFBFBD>s s'affichent n'importe comment&nbsp;&#x203d;</a></h3>
<p>De plus en plus de distributions Linux ont par d<>faut des terminaux
Unicode.
Si on se logue sur une autre machine Unix, il faut y faire un
<a href="#locales">r<>glage de <em>locales</em></a> pour pouvoir utiliser
convenablement certains programmes. Il n'y a rien de pr<70>vu au niveau
de <code>ssh</code> (tant mieux, <20>a pourrait <20>tre pire que rien...) pour
d<EFBFBD>finir sur la machine distante une locale coh<6F>rente avec l'encodage du
terminal dans lequel on travaille. Si ce n'est pas fait, les programmes
auront tendance <20> fonctionner comme dans un terminal <code>latin-1</code>,
d'o<> le n'importe quoi. En principe, on doit donc faire manuellement le
r<EFBFBD>glage de <em>locales</em> <20>voqu<71> ci-dessus.
</p>
<div class="ens">
Dans les configs conscrits r<>centes (<28> partir de 2004), un script
d'initialisation tente <20> chaque login distant de proc<6F>der <20> une d<>tection
de l'encodage du terminal, si ce programme d<>tecte un terminal Unicode,
il d<>finit la variable d'environnement <code>LC_CTYPE</code> <20>
<code>fr_FR.UTF-8</code> ce qui <20>vite d'avoir <20> faire <20> chaque fois le
r<EFBFBD>glage de <em>locales</em> manuellement. Pour <20>viter toute ambiguit<69>,
cette d<>tection d'encodage ne concerne que les connexions <em>vers</em>
un ordinateur de l'<27>cole.
</div>
<h3><a name="luit">Comment lancer des programmes ne g<>rant pas Unicode
dans un terminal Unicode&nbsp;?</a></h3>
<p>Certains logiciels ne g<>rent pas bien du tout Unicode, il faut donc
les lancer dans un terminal encod<6F> en <code>latin-1</code>. Mais si on
est en train de travailler dans un terminal Unicode, on a pas forc<72>ment
envie d'ouvrir une nouvelle fen<65>tre de terminal. Le programme
<code>luit</code> permet d'<27>muler un terminal <code>latin-1</code> <20>
l'int<6E>rieur d'un terminal Unicode. Si on est dans un terminal
Unicode, on peut ainsi utiliser la commande suivante&nbsp;:
</p>
<pre><span class="prompt">corvette ~ $</span>&nbsp;LC_CTYPE=fr_FR luit
</pre>
<p class="continue">Cela ouvre un nouveau <em>shell</em>. Les programmes
lanc<EFBFBD>s <20>&nbsp;<3B> l'int<6E>rieur d'icelui&nbsp;<3B> se comporteront vis-<2D>-vis de
l'utilisateur comme si celui-ci travaillait dans un terminal encod<6F> en
<code>latin-1</code> (on peut faire le <a href="#test">test</a> pour
s'en assurer). On peut lancer par exemple <code>pine</code> (qui ne g<>re
pas Unicode) dans ce <code>luit</code>. Une fois que l'on en a fini avec
ces programmes ne g<>rant pas Unicode, on peut revenir au terminal Unicode
de d<>part en quittant le shell (<code>exit</code> ou
<code>&lt;Control-D&gt;</code>).
</p>
<h3><a name="courrier">Comment lire son courrier dans un terminal
Unicode&nbsp;?</a></h3>
<p>
Le logiciel de courrier <20>lectronique <a
href="&url.tuteurs;internet/courrier/mail-mutt.html"><code>mutt</code></a>
fonctionne bien dans un terminal Unicode. Gr<47>ce <20> lui, on peut <a
href="&url.tuteurs;internet/courrier/international.html">lire ou
envoyer des messages dans des langues exotiques</a>&nbsp;; <a
href="&url.tuteurs;logiciels/mozilla/mail.html">Mozilla
Mail</a> sait aussi faire, mais c'est en mode graphique.
</p>
2005-06-01 11:00:28 +02:00
<p>Le logiciel <code>pine</code> ne g<>re pas Unicode. Il ne peut pas bien
fonctionner dans un terminal Unicode. Si on travaille dans un terminal
Unicode, mais que l'on souhaite quand m<>me lancer <code>pine</code>, il
faut absolument <a href="#luit">transformer provisoirement son terminal
en terminal <code>latin-1</code> avec <code>luit</code></a>.</p>
<div class="ens">
Les <a href="&url.tuteurs;meta/gourous.html">gourous</a>
ont fait en sorte que si on lance la commande <code>pine</code> dans
un terminal Unicode, le programme <code>luit</code> soit utilis<69> pour
<EFBFBD>muler un terminal <code>latin-1</code>, ce qui fait que l'on peut quand
m<EFBFBD>me utiliser normalement <code>pine</code>&nbsp;; cependant, on ne
pourra pas y voir ou saisir de caract<63>res exotiques.
</div>
2005-05-29 01:33:53 +02:00
<h2><a name="editeurs"><3E>diter des fichiers UTF-8</a></h2>
<h3>Quel <20>diteur utiliser&nbsp;?</h3>
<p>Les derni<6E>res versions de <a
href="&url.tuteurs;unix/editeurs/vim.html">Vim</a> et <a
href="&url.tuteurs;unix/editeurs/emacs.html">Emacs</a> g<>rent bien
Unicode, on peut les utiliser pour <20>diter des fichiers encod<6F>s en UTF-8
(ou dans d'autres encodages). La page <a
href="&url.tuteurs;unix/editeurs/unicode.html">taper de l'Unicode</a>
donne quelques informations sur l'utilisation de ces <20>diteurs. On peut
aussi utiliser <a href="http://www.yudit.org/">yudit</a> qui est un tr<74>s
mauvais <20>diteur, mais qui est cependant extr<74>mement bon pour ce qui est
du rendu du texte dans beaucoup de langues (on peut lui sp<73>cifier une
fonte pour chaque alphabet, il g<>re tr<74>s bien l'<27>criture de droite <20>
gauche, les syst<73>mes complexes de ligatures, et il propose un large choix
de m<>thodes d'entr<74>es).
En revanche, <code>pico</code> (et <code>nano</code>) ne
g<EFBFBD>rent pas Unicode.
</p>
2005-05-29 23:10:02 +02:00
<div class="ens">
La version 21.3 d'<a href="&url.tuteurs;unix/editeurs/emacs.html">Emacs</a>
install<EFBFBD>e actuellement a quelques probl<62>mes dans sa gestion
d'Unicode. Il vaut mieux utiliser une version encore plus r<>cente, accessible
avec la commande <code>emacs-22dev</code>.
</div>
2005-05-29 01:33:53 +02:00
<h3>Mon <20>diteur n'a pas d<>tect<63> que mon fichier <20>tait en UTF-8, comment
le lui dire&nbsp;?</h3>
<p>On d<>tecte souvent qu'un programme n'est pas conscient qu'un fichier
est encod<6F> en UTF-8 quand chaque caract<63>re accentu<74> est remplac<61>s par
deux caract<63>res bizarres (exemple&nbsp;: <20>&nbsp;Caractéristique
d'Euler-Poincaré&nbsp;<3B>).
2005-05-29 02:03:35 +02:00
Il faut alors dire <20> l'<27>diteur de reconsid<69>rer le fichier pour le traiter
2005-05-29 01:33:53 +02:00
comme de l'UTF-8. Dans Vim, on peut taper <code>:edit ++enc=utf-8</code>
en mode commande. Dans Emacs, aller dans le menu Options, choisir Mule,
puis Set Coding System For Reverting This File Now
(<code>C-x&nbsp;RET&nbsp;r</code>),
taper <code>utf-8</code> et valider.</p>
2005-05-29 01:33:53 +02:00
<h3>Je veux enregistrer mon fichier dans un autre encodage. Comment
faire&nbsp;?</h3>
<p>Dans Vim, la variable sp<73>cifiant l'encodage du fichier que l'on <20>dite
est <code>fileencoding</code>, on peut ainsi faire <code>:set
fileencoding=latin-1</code> ou <code>set fileencoding=utf-8</code> si on
veut changer d'encodage&nbsp;; cela prendra effet au prochain
<code>:w</code>. Dans Emacs, aller dans le menu Options, choisir Mule,
puis Set Coding System For Saving This Buffer
(<code>C-x&nbsp;RET&nbsp;f</code>), entrer le nom de
2005-05-29 01:33:53 +02:00
l'encodage et valider.</p>
<h3><a name="latex">Comment mettre en page du texte dans des langues
exotiques avec LaTeX&nbsp;?</a></h3>
<p>Avec LaTeX, on peut mettre en page du texte <20>crit dans des langues
exotiques. Sur notre <a href="&url.tuteurs;logiciels/latex/langues.html">page
LaTeX sur les langues exotiques</a>, on trouve la marche <20> suivre pour
obtenir ce r<>sultat <20> partir d'un fichier TeX encod<6F> en UTF-8 (au moins
pour du grec, du cyrillique, du chinois et du japonais).
</p>
<p>
Des variantes de TeX/LaTeX ont <20>t<EFBFBD> d<>velopp<70>es r<>cemment&nbsp;: Omega/Lambda
2005-05-29 01:33:53 +02:00
puis Aleph/Lamed. Elles g<>rent non plus des suites d'octets (256 valeurs
possibles) mais des suites de deux octets (65536 valeurs possibles). On
peut ainsi imaginer une grosse fonte virtuelle contenant les glyphes de
toutes les langues que l'on va utiliser dans un texte&nbsp;; les num<75>ros
de ces glyphes co<63>ncideraient avec les num<75>ros Unicode des caract<63>res.
Aleph et Lamed permettent
d'appliquer des filtres au fichier source, on peut ainsi concevoir un
filtre qui prend en entr<74>e un fichier texte encod<6F> en UTF-8 et le
convertit en une suite de num<75>ros Unicode. Avec une fonte virtuelle
du type <20>voqu<71> pr<70>c<EFBFBD>demment, il n'y aurait plus de grosse difficult<6C> <20>
mettre en page du texte dans des langues exotiques. Cependant, on en est
encore qu'aux balbutiements, mais cette petite cuisine a quand m<>me pu
<EFBFBD>tre utilis<69>e pour r<>aliser l'<a href="&url.eleves;annuaire/">Annuaire
2005-05-29 11:15:36 +02:00
des <20>l<EFBFBD>ves</a> qui contient quelques citations dans des langues
2005-05-29 01:33:53 +02:00
n'utilisant pas l'alphabet latin.
</p>
<h2><a name="x11">Programmes graphiques</a></h2>
<h3>Quels programmes graphiques g<>rent Unicode&nbsp;?</h3>
<p>En mode graphique, beaucoup de programmes sont concern<72>s par Unicode,
de fa<66>on plus ou moins importante.
Les <a href="#terminaux"><3E>mulateurs de
terminaux</a> comme <code>xterm</code> le sont <20>videmment. Plus g<>n<EFBFBD>ralement,
beaucoup de programmes doivent afficher du texte dans des
langues exotiques, par exemple s'ils ont <20>t<EFBFBD> con<6F>us pour pouvoir
avoir des messages et des menus dans d'autres langues que l'anglais
(voir le <a href="#locales">r<>glage de la locale
<code>LC_MESSAGES</code></a>). Les programmes utilisant les biblioth<74>ques
<a href="http://www.gtk.org/"><code>GTK+</code></a> disposent
naturellement d'un tr<74>s bon support d'Unicode&nbsp;; en effet, les
cha<EFBFBD>nes de caract<63>res manipul<75>es sont encod<6F>es en UTF-8 et la
biblioth<EFBFBD>que Pango (faisant partie de <code>GTK+</code>) se charge
d'afficher convenablement le texte, ce qui n'est pas trivial du tout
(par exemple pour les langues indiennes) m<>me si on a de bonnes fontes de
caract<EFBFBD>res.
</p>
<h3><a name="fontes">Quelles fontes utiliser pour afficher des caract<63>res
Unicode&nbsp;?</a></h3>
<p>On peut trouver des <a href="http://www.nongnu.org/freefont/">fontes
TrueType libres</a> (packag<61>es par la plupart des distributions Linux),
elles couvrent notamment la plupart des langues utilis<69>es en Europe
(alphabets latin, cyrillique et grec). Pour utiliser la fonte
<code>FreeMono</code> dans <code>xterm</code>, en supposant que les
fontes <20>voqu<71>es ici soient convenablement install<6C>es, on peut utiliser la
commande <code>uxterm -fa FreeMono</code> (pourvu que la version
de <code>xterm</code> utilis<69>e soit suffisamment r<>cente). Si on veut
afficher des caract<63>res provenant d'alphabets non couverts par ces
fontes, il faut <20>videmment utiliser d'autres fontes... On peut regretter
que <code>xterm</code> ne soit actuellement pas capable d'utiliser
plusieurs fontes simultan<61>ment (on pourrait lui sp<73>cifier une fonte <20>
utiliser pour les alphabets latin, cyrillique et grec et une autre fonte
pour les id<69>ogrammes chinois par exemple)&nbsp;; en revanche,
l'<27>mulateur de terminal <a
href="http://software.schmorp.de/#rxvt-unicode"><code>rxvt-unicode</code></a>
peut le faire.
</p>
<h2><a name="internet">Unicode et Internet</a></h2>
<h3><a name="html">Comment ins<6E>rer un caract<63>re
Unicode dans une page Web&nbsp;?</a></h3>
2005-05-29 01:33:53 +02:00
<p>Il y a deux m<>thodes. La premi<6D>re consiste <20> utiliser des entit<69>s
HTML&nbsp;: si on ins<6E>re la cha<68>ne de caract<63>res
<EFBFBD><code>&amp;#x203d;</code><3E> dans un fichier HTML, le navigateur
affiche <20>&#x203d;<3B> comme vous pouvez le constater, si le navigateur
est en mesure d'afficher ce caract<63>re Unicode, on devrait ainsi voir le
caract<EFBFBD>re U+203D INTERROBANG. Pour un caract<63>re Unicode quelconque, il
suffit de remplacer <code>203d</code> par la repr<70>sentation en
hexad<EFBFBD>cimal du num<75>ro du caract<63>re Unicode. On peut aussi utiliser le
num<EFBFBD>ro sous sa forme d<>cimale&nbsp;: <code>&amp;#8253;</code> (&#8253;).
2005-05-29 01:33:53 +02:00
</p>
<p>
La deuxi<78>me m<>thode consiste <20> encoder tout le fichier HTML en UTF-8. On
saisit alors le caract<63>re Unicode comme n'importe quel autre caract<63>re
(ce qui n<>cessite d'avoir un <a href="#editeurs"><3E>diteur UTF-8</a>). Cela
suppose d'avoir convenablement d<>clar<61> l'encodage du fichier HTML. Cela
peut se faire en ins<6E>rant la balise suivante
</p>
<pre>
&lt;meta http-equiv="Content-Type" content="text/html; charset=utf-8" &gt;
2005-05-29 01:33:53 +02:00
</pre>
<p class="continue">
dans les en-t<>tes du fichier HTML (entre <code>&lt;meta&gt;</code> et
<code>&lt;/meta&gt;</code>). Si le fichier est en XHTML, il faut fermer
la balise <code>&lt;meta&gt;</code>&nbsp;:
</p>
<pre>
&lt;meta http-equiv="Content-Type" content="text/html; charset=utf-8" /&gt;
</pre>
<p class="continue">
et il est
2005-05-29 01:33:53 +02:00
recommandable de d<>finir l'encodage du fichier en faisant de plus
une d<>claration XML sur la premi<6D>re ligne du fichier&nbsp;:
2005-05-29 01:33:53 +02:00
</p>
<pre>
&lt;?xml version="1.0" encoding="UTF-8"?&gt;
</pre>
<p>
S'il ne s'agit d'ins<6E>rer qu'une poign<67>e de caract<63>res exotiques, il
est sans doute plus pratique d'utiliser des entit<69>s HTML pour ins<6E>rer ces
caract<EFBFBD>res. S'il y en a beaucoup, il devient commode d'utiliser la
deuxi<EFBFBD>me m<>thode pour <20>diter directement le fichier HTML dans un
<EFBFBD>diteur g<>rant l'encodage UTF-8. Notons que les deux m<>thodes ne sont pas
incompatibles, on peut mettre des entit<69>s HTML du type ci-dessus dans un
fichier HTML, quelque soit son encodage, y compris UTF-8.
2005-05-29 01:33:53 +02:00
</p>
<h3>Mon navigateur Web affiche mal mes caract<63>res
Unicode. Que faire&nbsp;?</h3>
2005-05-29 01:33:53 +02:00
<p>Certains navigateurs (comme <a
href="&url.tuteurs;logiciels/mozilla/">Mozilla</a>) permettent de
sp<EFBFBD>cifier une fonte <20> utiliser pour tel ou tel groupe de langues. Quand
on ins<6E>re du texte dans une langue exotique, on a ainsi int<6E>r<EFBFBD>t <20>
d<EFBFBD>clarer la langue dans laquelle est <20>crit le texte, cela permet au
navigateur de choisir directement la bonne fonte <20> utiliser pour afficher
les caract<63>res, au lieu de parcourir toutes les fontes existantes jusqu'<27>
en trouver une qui associe un glyphe au num<75>ro Unicode voulu. Ceci peut
donner des r<>sultats horribles&nbsp;: imaginons que vous ayez un texte en grec
2005-05-29 01:33:53 +02:00
ancien avec beaucoup d'accents et d'esprits et que la fonte par d<>faut ne
contienne que les caract<63>res grecs de base (sans les accents), on risque
de se retrouver avec un m<>lange du plus mauvais effet entre deux fontes
de caract<63>res, la fonte de base utilis<69>e pour les caract<63>res non
accentu<EFBFBD>s et une autre pour les caract<63>res plus compliqu<71>s&nbsp;; si le
navigateur est pr<70>venu d<>s le d<>part que c'est du grec ancien, il fera
sans doute mieux.
</p>
<p>
<!-- NDjriou: le "text-align: left;" est du bugware pour que cela
s'affiche bien chez moi dans Mozilla, sans cela, l'alignement justifi<66> d<>fini
dans tuteurs.css provoque un comportement bizarre. -->
Pour ins<6E>rer le mot Hindi <a style="text-align: left;"><cite lang="hi"
xml:lang="hi">&#x92c;&#x93f;&#x930;&#x92f;&#x93e;&#x928;&#x940;</cite></a>
dont une transcription est <20>&nbsp;biry<72>n<EFBFBD>&nbsp;<3B>, on a utilis<69> le code
suivant&nbsp;:
2005-05-29 01:33:53 +02:00
</p>
<pre>
&lt;cite lang="hi" xml:lang="hi"&gt;&amp;#x92c;&amp;#x93f;&amp;#x930;&amp;#x92f;&amp;#x93e;&amp;#x928;&amp;#x940;&lt;/cite&gt;
</pre>
<p>
Les attributs <code>lang</code> et <code>xml:lang</code> s'appliquent <20>
beaucoup d'autres <20>l<EFBFBD>ments (X)HTML, <code>&lt;p&gt;</code> et
<code>&lt;a&gt;</code> notamment. Sauf cas particuliers, le code de la langue
(dans l'exemple, c'est <code>hi</code>) doit <20>tre un code <20> deux
lettres figurant dans le <a
href="http://fr.wikipedia.org/wiki/ISO_639">standard ISO 639</a>.
</p>
<h3><a name="test-navigateur">Comment d<>terminer dans quelle mesure mon navigateur g<>re
Unicode&nbsp;?</a></h3>
<p>On peut utiliser la <a
href="http://www.madore.org/~david/misc/unitest/">page de test
Unicode</a> sur le site de David A. Madore. Attention, cependant, ce
n'est pas parce que vous voyez plein de caract<63>res exotiques dispos<6F>s un
peu partout que votre navigateur g<>re parfaitement les langues <20>trang<6E>res
cens<EFBFBD>ment repr<70>sent<6E>es sur la page, si on regarde plus attentivement
certains d<>tails, il arrive souvent que l'on voie des bugs (probl<62>mes
dans les fontes de caract<63>res, support rudimentaire de certaines langues,
m<EFBFBD>lange disgracieux entre plusieurs fontes de caract<63>res pour afficher le
grec, absence de certaines ligatures, etc...). </p>
<h2>Divers</h2>
<h3><a name="troll">Je voudrais mettre des accents dans mes noms de
fichiers, et <20>a me marche pas. Que faire&nbsp;?</a></h3>
2005-05-29 01:33:53 +02:00
<p>C'est une tr<74>s mauvaise id<69>e de vouloir mettre des caract<63>res
accentu<EFBFBD>s (ou exotiques) dans les noms de fichiers. Le fait de mettre des
espaces pose d<>j<EFBFBD> des probl<62>mes, des caract<63>res comme <20>/<2F>, <20>\<5C> ou <20>:<3A>
sont prohib<69>s sur certains syst<73>mes de fichiers, alors vouloir mettre
des accents, ce n'est que chercher des ennuis suppl<70>mentaires (notamment
quand on veut transf<73>rer des fichiers sur un autre ordinateur ou sur une
disquette). Bref, <20> <20>viter absolument.</p>
<div class="metainformation">
Auteur&nbsp;: Jo<4A>l Riou.
2005-06-01 11:00:28 +02:00
Derni<EFBFBD>re modification le <date value="$Date: 2005-06-01 09:00:28 $" />.
2005-05-29 01:33:53 +02:00
</div>
</body>
</html>