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>
|
|
|
|
|
|
2005-05-29 11:07:50 +02:00
|
|
|
|
<h1>Foire Aux Questions des Tuteurs : 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>
|
|
|
|
|
|
2005-05-29 11:07:50 +02:00
|
|
|
|
<h3><a name="unicode">Qu'est-ce que le Standard Unicode ?</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
|
2005-05-29 11:07:50 +02:00
|
|
|
|
leurs variantes, par exemple, un caract<63>re comme <20> œ <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
|
2005-05-29 11:07:50 +02:00
|
|
|
|
Asie figurent aussi dans le standard : 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>
|
|
|
|
|
|
2005-05-29 11:07:50 +02:00
|
|
|
|
<h3><a name="caractere">Qu'est-ce qu'un caract<63>re Unicode ?</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>
|
2005-05-29 11:07:50 +02:00
|
|
|
|
de <20>U+<2B>. Par exemple, la lettre latine <20> a <3B> correspond <20> U+0061, la lettre
|
|
|
|
|
cyrillique <20> Я <3B> correspond <20> U+042F et le "DEVANAGARI OM"
|
|
|
|
|
<EFBFBD> ॐ <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
|
2005-05-29 11:07:50 +02:00
|
|
|
|
suivantes ; 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> a <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>
|
|
|
|
|
|
2005-05-29 11:07:50 +02:00
|
|
|
|
<h3><a name="utf8">Qu'est-ce que <20> UTF-8 <3B> ?</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 ?</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>
|
|
|
|
|
|
2005-05-29 11:07:50 +02:00
|
|
|
|
<h3>Qu'est-ce qu'un terminal Unicode ?</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> tourner <3B> <20> l'int<6E>rieur de ce terminal : 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> ordinaires <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 ; 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>
|
|
|
|
|
|
2005-05-29 11:07:50 +02:00
|
|
|
|
<h3><a name="uxterm">Comment lancer un terminal Unicode ?</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> Fen<65>tres <3B> puis sur
|
|
|
|
|
<EFBFBD> Terminal Unicode <3B>.
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
<h3><a name="test">Comment savoir si je suis dans un terminal
|
|
|
|
|
Unicode ?</a></h3>
|
|
|
|
|
|
|
|
|
|
<p>
|
|
|
|
|
La mani<6E>re la plus rapide est probablement de taper la suite de
|
|
|
|
|
touches
|
|
|
|
|
<EFBFBD>xxd<code><Enter><Compose><apostrophe></code>e<code><Enter><Control-D></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 : on saisit un e accent aigu avec la touche compose,
|
|
|
|
|
on valide et on ferme avec <code><Control-D></code>. Si on se trouve dans
|
2005-05-29 11:07:50 +02:00
|
|
|
|
un terminal <code>latin-1</code>, on va voir :
|
2005-05-29 01:33:53 +02:00
|
|
|
|
</p>
|
|
|
|
|
<pre><span class="prompt">clipper ~ $</span> xxd
|
|
|
|
|
<EFBFBD>
|
|
|
|
|
0000000: e90a ..
|
|
|
|
|
</pre>
|
|
|
|
|
<p class="continue">tandis que dans un terminal Unicode, on
|
|
|
|
|
verra :</p>
|
|
|
|
|
<pre>
|
|
|
|
|
<span class="prompt">clipper ~ $</span> 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 : <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 :
|
|
|
|
|
</p>
|
|
|
|
|
<pre><span class="prompt">clipper ~ $</span> printf '\xc3\xa9\n'
|
|
|
|
|
</pre>
|
|
|
|
|
|
|
|
|
|
<h3><a name="locales">Comment faire fonctionner des
|
|
|
|
|
programmes dans un terminal Unicode ?</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 :</p>
|
|
|
|
|
<pre><span class="prompt">clipper ~ $</span> 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> :
|
|
|
|
|
</p>
|
|
|
|
|
<pre>
|
|
|
|
|
<span class="prompt">clipper ~ $</span> 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 ‽</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 ?</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 :
|
|
|
|
|
</p>
|
|
|
|
|
<pre><span class="prompt">corvette ~ $</span> LC_CTYPE=fr_FR luit
|
|
|
|
|
</pre>
|
|
|
|
|
<p class="continue">Cela ouvre un nouveau <em>shell</em>. Les programmes
|
|
|
|
|
lanc<EFBFBD>s <20> <3B> l'int<6E>rieur d'icelui <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><Control-D></code>).
|
|
|
|
|
</p>
|
|
|
|
|
|
|
|
|
|
<h3><a name="courrier">Comment lire son courrier dans un terminal
|
|
|
|
|
Unicode ?</a></h3>
|
|
|
|
|
|
|
|
|
|
<div class="attention">
|
|
|
|
|
<h1>&icone.attention; Attention &icone.attention;</h1>
|
|
|
|
|
<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></a>.</p>
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
<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> ; <a
|
|
|
|
|
href="&url.tuteurs;logiciels/mozilla/mail.html">Mozilla
|
|
|
|
|
Mail</a> sait aussi faire, mais c'est en mode graphique.
|
|
|
|
|
</p>
|
|
|
|
|
|
|
|
|
|
<h2><a name="editeurs"><3E>diter des fichiers UTF-8</a></h2>
|
|
|
|
|
|
|
|
|
|
<h3>Quel <20>diteur utiliser ?</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 ?</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 : <20> Caractéristique
|
|
|
|
|
d'Euler-Poincaré <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,
|
2005-05-29 11:07:50 +02:00
|
|
|
|
puis Set Coding System For Reverting This File Now
|
|
|
|
|
(<code>C-x RET 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 ?</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 ; cela prendra effet au prochain
|
|
|
|
|
<code>:w</code>. Dans Emacs, aller dans le menu Options, choisir Mule,
|
2005-05-29 11:07:50 +02:00
|
|
|
|
puis Set Coding System For Saving This Buffer
|
|
|
|
|
(<code>C-x RET 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 ?</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>
|
2005-05-29 11:07:50 +02:00
|
|
|
|
Des variantes de TeX/LaTeX ont <20>t<EFBFBD> d<>velopp<70>es r<>cemment : 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 ; 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 ?</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 ; 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 ?</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) ; 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
|
2005-05-29 11:07:50 +02:00
|
|
|
|
Unicode dans une page Web ?</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 : si on ins<6E>re la cha<68>ne de caract<63>res
|
|
|
|
|
<EFBFBD><code>&#x203d;</code><3E> dans un fichier HTML, le navigateur
|
|
|
|
|
affiche <20>‽<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
|
2005-05-29 11:07:50 +02:00
|
|
|
|
num<EFBFBD>ro sous sa forme d<>cimale : <code>&#8253;</code> (‽).
|
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>
|
2005-05-29 11:07:50 +02:00
|
|
|
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" >
|
2005-05-29 01:33:53 +02:00
|
|
|
|
</pre>
|
|
|
|
|
<p class="continue">
|
|
|
|
|
dans les en-t<>tes du fichier HTML (entre <code><meta></code> et
|
2005-05-29 11:07:50 +02:00
|
|
|
|
<code></meta></code>). Si le fichier est en XHTML, il faut fermer
|
|
|
|
|
la balise <code><meta></code> :
|
|
|
|
|
</p>
|
|
|
|
|
<pre>
|
|
|
|
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
|
|
|
|
</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
|
2005-05-29 11:07:50 +02:00
|
|
|
|
une d<>claration XML sur la premi<6D>re ligne du fichier :
|
2005-05-29 01:33:53 +02:00
|
|
|
|
</p>
|
|
|
|
|
<pre>
|
|
|
|
|
<?xml version="1.0" encoding="UTF-8"?>
|
|
|
|
|
</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
|
2005-05-29 11:07:50 +02:00
|
|
|
|
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
|
2005-05-29 11:07:50 +02:00
|
|
|
|
Unicode. Que faire ?</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
|
2005-05-29 11:07:50 +02:00
|
|
|
|
donner des r<>sultats horribles : 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 ; 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">बिरयानी</cite></a>
|
|
|
|
|
dont une transcription est <20> biry<72>n<EFBFBD> <3B>, on a utilis<69> le code
|
2005-05-29 11:07:50 +02:00
|
|
|
|
suivant :
|
2005-05-29 01:33:53 +02:00
|
|
|
|
</p>
|
|
|
|
|
<pre>
|
|
|
|
|
<cite lang="hi" xml:lang="hi">&#x92c;&#x93f;&#x930;&#x92f;&#x93e;&#x928;&#x940;</cite>
|
|
|
|
|
</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><p></code> et
|
|
|
|
|
<code><a></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 ?</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
|
2005-05-29 11:07:50 +02:00
|
|
|
|
fichiers, et <20>a me marche pas. Que faire ?</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">
|
2005-05-29 11:07:50 +02:00
|
|
|
|
Auteur : Jo<4A>l Riou.
|
2005-05-29 23:10:02 +02:00
|
|
|
|
Derni<EFBFBD>re modification le <date value="$Date: 2005-05-29 21:10:02 $" />.
|
2005-05-29 01:33:53 +02:00
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
</body>
|
|
|
|
|
</html>
|