576 lines
27 KiB
XML
576 lines
27 KiB
XML
<?xml version="1.0" encoding="UTF-8"?>
|
||
<!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 : Unicode, UTF-8</h1>
|
||
|
||
<p>Cette Foire Aux Questions (<a
|
||
href="&url.tuteurs;jargon.html#FAQ">FAQ</a>) rassemble entre autres des
|
||
questions fréquemment posées dans le courrier électronique adressé 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éralités et théorie</h2>
|
||
|
||
<h3><a name="unicode">Qu'est-ce que le Standard Unicode ?</a></h3>
|
||
|
||
<p>Le <a href="http://www.unicode.org/">Standard Unicode</a> est produit
|
||
par une organisation à but non lucratif (le Consortium Unicode) ayant
|
||
pour objectif d'attribuer un numéro à tout caractère utilisé dans une langue
|
||
humaine. Cette entreprise vise à une certaine universalité. Les alphabets
|
||
de <b>beaucoup</b> de langues sont déjà inscrits dans ce standard. On y trouve
|
||
évidemment les alphabets latins, grecs et cyrilliques (avec certaines de
|
||
leurs variantes, par exemple, un caractère comme « œ » y figure,
|
||
bien qu'il ne soit pas utilisé dans la plupart des autres langues
|
||
européennes utilisant l'alphabet latin). Beaucoup de langues parlées en
|
||
Asie figurent aussi dans le standard : des dizaines de miliers de
|
||
caractères chinois, japonais ou coréens sont définis. Le standard
|
||
contient bien d'autres alphabets, la consultation des tableaux de
|
||
caractères (dans la version imprimée du standard ou <a
|
||
href="http://www.unicode.org/charts/">sur le site officiel</a>) est une
|
||
véritable source d'émerveillement... </p>
|
||
|
||
<h3><a name="caractere">Qu'est-ce qu'un caractère Unicode ?</a></h3>
|
||
|
||
<p>Un caractère Unicode est un caractère défini dans le Standard Unicode.
|
||
On y fait souvent référence par son numéro écrit en hexadécimal précédé
|
||
de «U+». Par exemple, la lettre latine « a » correspond à U+0061, la lettre
|
||
cyrillique « Я » correspond à U+042F et le "DEVANAGARI OM"
|
||
« ॐ » correspond à U+0950. Certains de ces caractères ne
|
||
s'affichent peut-être pas correctement sur votre écran, cela dépend de
|
||
plusieurs paramètres, nous reviendrons sur ce point dans les questions
|
||
suivantes ; il faut cependant garder une chose à l'esprit, le Standard
|
||
Unicode définit des listes de caractères, donne un nom à chaque
|
||
caractère (pour « a », c'est "LATIN SMALL LETTER A"), mais en aucun
|
||
cas, le glyphe devant représenter chaque caractère n'est normalisé, en
|
||
effet, plusieurs fontes de caractères peuvent être utilisées.</p>
|
||
|
||
<h3><a name="utf8">Qu'est-ce que « UTF-8 » ?</a></h3>
|
||
|
||
<p>"UTF" est formé des initiales de "Unicode Transformation Format".
|
||
Les ordinateurs stoquent et échangent leurs données le plus souvent sous
|
||
forme de suite d'octets, un octet étant constitué 8 bits. Un octet peut
|
||
donc se être représenté comme un nombre entier compris (au sens large)
|
||
entre 0 et 255. Si on veut stoquer sur un support informatique
|
||
un texte constitué de caractères Unicode, il faut choisir un
|
||
procédé transformant une suite de caractères Unicode en une suite
|
||
d'octets et réciproquement avoir un procédé pour retrouver la suite de
|
||
caractères à partir d'une suite d'octets bien formée, ces donné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 échanger des textes constitués de
|
||
caractères Unicode est UTF-8. Il associe à tout numéro Unicode
|
||
une suite d'un ou plusieurs octets (jusqu'à quatre octets pour un seul
|
||
caractère). Cet encodage est décrit dans la <a
|
||
href="http://www.faqs.org/rfcs/rfc2279.html">RFC 2279</a>.
|
||
Une des propriétés importantes de cet encodage est que les caractères
|
||
dont les numéros sont compris entre 32 et 126 possèdent la même
|
||
repré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 à faire pour
|
||
convertir un fichier encodé en ASCII vers UTF-8. Réciproquement, si un
|
||
octet représentant un nombre compris entre 32 et 126 apparaît dans un
|
||
fichier encodé en UTF-8, alors c'est forcément pour encoder le caractère
|
||
ASCII du même numé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és sont
|
||
notamment les <a href="#editeurs">éditeurs de texte</a>,
|
||
les logiciels de traitement de texte,
|
||
les logiciels de <a href="#courrier">courrier é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 ?</h3>
|
||
|
||
<p>Un terminal (ou un émulateur de terminal) consiste en une interface
|
||
qui permet de saisir et d'afficher du texte, divers programmes peuvent
|
||
« tourner » à l'intérieur de ce terminal : un interpréteur
|
||
de commandes (<em>shell</em>), un logiciel pour gérer ses mails, un
|
||
éditeur de texte, etc... Le terminal et les programmes qui tournent à
|
||
l'intérieur d'icelui doivent se mettrent d'accord d'une manière ou d'une
|
||
autre pour savoir dans quel encodage le texte doit communiquer entre eux,
|
||
et ce de façon cohérente avec les caractères effectivement
|
||
affichés à l'é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 « ordinaires » où l'encodage
|
||
est mono-octet (c'est-à-dire ne permet de représenter qu'un peu moins de
|
||
256 caractères différents), le plus souvent <code>latin-1</code> en
|
||
France. </p>
|
||
|
||
<p>
|
||
Dans un terminal Unicode, on peut ainsi afficher beaucoup plus de
|
||
caractères diffé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'écriture utilise
|
||
des systèmes de ligatures complexes ; pour le reste, cela
|
||
fonctionne très bien. Il y a quelques subtilités, les caractères
|
||
chinois/japonais/coréens occupent ainsi deux cases contiguës au lieu
|
||
d'une seule.
|
||
</p>
|
||
|
||
<h3><a name="uxterm">Comment lancer un terminal Unicode ?</a></h3>
|
||
|
||
<p>Il existe beaucoup d'émulateurs de terminaux sous Unix, certains
|
||
savent gérer Unicode, d'autres non. Le programme
|
||
de référence <code>xterm</code> sait faire, pour le lancer de façon à
|
||
obtenir un terminal Unicode, le plus commode est d'utiliser la commande
|
||
<code>uxterm</code> qui est en géné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 à la fois un client SSH et un é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, à partir
|
||
du Menu, on peut cliquer sur « Fenêtres » puis sur
|
||
« Terminal Unicode ».
|
||
</div>
|
||
|
||
<h3><a name="test">Comment savoir si je suis dans un terminal
|
||
Unicode ?</a></h3>
|
||
|
||
<p>
|
||
La manière la plus rapide est probablement de taper la suite de
|
||
touches
|
||
«xxd<code><Enter><Compose><apostrophe></code>e<code><Enter><Control-D></code>».
|
||
Autrement dit, on lance le programme <code>xxd</code> qui va servir à
|
||
afficher la représentation en hexadé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
|
||
un terminal <code>latin-1</code>, on va voir :
|
||
</p>
|
||
<pre><span class="prompt">clipper ~ $</span> xxd
|
||
é
|
||
0000000: e90a ..
|
||
</pre>
|
||
<p class="continue">tandis que dans un terminal Unicode, on
|
||
verra :</p>
|
||
<pre>
|
||
<span class="prompt">clipper ~ $</span> xxd
|
||
é
|
||
0000000: c3a9 0a ...
|
||
</pre>
|
||
<p class="continue">Le <code>0a</code> que l'on voit dans les deux
|
||
résultats représente le caractère <code>U+00A0</code> LINE FEED (LF) qui
|
||
s'encode de la même manière en <code>latin-1</code> et en UTF-8. La
|
||
différence porte donc sur l'encodage du caractère <code>U+00E9</code> LATIN
|
||
SMALL LETTER E WITH ACUTE (le e accent aigu), en
|
||
<code>latin-1</code>, on le
|
||
représente par un seul octet de valeur hexadé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ère de le déterminer consiste à utiliser la sortie du
|
||
terminal plutôt que son entrée. On va envoyer sur la sortie la
|
||
repré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ères
|
||
qui n'ont rien à voir (en l'occurence «Ã©»), 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ée pour spécifier aux programmes
|
||
dans quel encodage est encodé le terminal dans lequel ils fonctionnent
|
||
est donné par les <em>locales</em>. Pour connaî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çais de France (et non du français de Suisse par
|
||
exemple) <em>encodé 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ées par la suite dans ce terminal. La variable d'environnement
|
||
<code>LC_MESSAGES</code> peut également ê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> à <code>fr_FR.UTF-8</code>,
|
||
les messages qu'affichera un logiciel de courrier électronique comme
|
||
<a
|
||
href="&url.tuteurs;internet/courrier/mail-mutt.html"><code>mutt</code></a>
|
||
seront en français.</p>
|
||
|
||
<h3><a name="ssh">Quand je me logue par <code>ssh</code>, les caractères
|
||
accentué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évu au niveau
|
||
de <code>ssh</code> (tant mieux, ça pourrait être pire que rien...) pour
|
||
définir sur la machine distante une locale cohérente avec l'encodage du
|
||
terminal dans lequel on travaille. Si ce n'est pas fait, les programmes
|
||
auront tendance à fonctionner comme dans un terminal <code>latin-1</code>,
|
||
d'où le n'importe quoi. En principe, on doit donc faire manuellement le
|
||
réglage de <em>locales</em> évoqué ci-dessus.
|
||
</p>
|
||
|
||
<div class="ens">
|
||
Dans les configs conscrits récentes (à partir de 2004), un script
|
||
d'initialisation tente à chaque login distant de procéder à 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> à
|
||
<code>fr_FR.UTF-8</code> ce qui évite d'avoir à faire à chaque fois le
|
||
réglage de <em>locales</em> manuellement. Pour éviter toute ambiguité,
|
||
cette détection d'encodage ne concerne que les connexions <em>vers</em>
|
||
un ordinateur de l'É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é en <code>latin-1</code>. Mais si on
|
||
est en train de travailler dans un terminal Unicode, on a pas forcément
|
||
envie d'ouvrir une nouvelle fenêtre de terminal. Le programme
|
||
<code>luit</code> permet d'émuler un terminal <code>latin-1</code> à
|
||
l'inté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és « à l'intérieur d'icelui » se comporteront vis-à-vis de
|
||
l'utilisateur comme si celui-ci travaillait dans un terminal encodé 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>
|
||
|
||
<p>
|
||
Le logiciel de courrier électronique <a
|
||
href="&url.tuteurs;internet/courrier/mail-mutt.html"><code>mutt</code></a>
|
||
fonctionne bien dans un terminal Unicode. Grâce à 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>
|
||
|
||
<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é pour
|
||
émuler un terminal <code>latin-1</code>, ce qui fait que l'on peut quand
|
||
même utiliser normalement <code>pine</code> ; cependant, on ne
|
||
pourra pas y voir ou saisir de caractères exotiques.
|
||
</div>
|
||
|
||
<h2><a name="editeurs">Éditer des fichiers UTF-8</a></h2>
|
||
|
||
<h3>Quel éditeur utiliser ?</h3>
|
||
|
||
<p>Les derniè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 éditer des fichiers encodé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 éditeurs. On peut
|
||
aussi utiliser <a href="http://www.yudit.org/">yudit</a> qui est un très
|
||
mauvais éditeur, mais qui est cependant extrêmement bon pour ce qui est
|
||
du rendu du texte dans beaucoup de langues (on peut lui spécifier une
|
||
fonte pour chaque alphabet, il gère très bien l'écriture de droite à
|
||
gauche, les systèmes complexes de ligatures, et il propose un large choix
|
||
de méthodes d'entrées).
|
||
En revanche, <code>pico</code> (et <code>nano</code>) ne
|
||
gèrent pas Unicode.
|
||
</p>
|
||
|
||
<h3>Mon éditeur n'a pas détecté que mon fichier é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é en UTF-8 quand chaque caractère accentué est remplacés par
|
||
deux caractères bizarres (exemple : « Caractéristique
|
||
d'Euler-Poincaré »).
|
||
Il faut alors dire à l'éditeur de reconsidérer le fichier pour le traiter
|
||
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 RET r</code>),
|
||
taper <code>utf-8</code> et valider.</p>
|
||
|
||
<h3>Je veux enregistrer mon fichier dans un autre encodage. Comment
|
||
faire ?</h3>
|
||
|
||
<p>Dans Vim, la variable spécifiant l'encodage du fichier que l'on é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,
|
||
puis Set Coding System For Saving This Buffer
|
||
(<code>C-x RET f</code>), entrer le nom de
|
||
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 é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 à suivre pour
|
||
obtenir ce résultat à partir d'un fichier TeX encodé en UTF-8 (au moins
|
||
pour du grec, du cyrillique, du chinois et du japonais).
|
||
</p>
|
||
|
||
<p>
|
||
Des variantes de TeX/LaTeX ont été développées récemment : Omega/Lambda
|
||
puis Aleph/Lamed, aujourd'hui abandonnées, puis
|
||
<a href="&url.tuteurs;logiciels/latex/xetex.html">XeTeX</a> et LuaTeX.
|
||
Toutes ces variantes ont pour but de supprimer la limitation de TeX à
|
||
256 caractères par police. Aleph gère ainsi des suites de deux octets
|
||
(65536 valeurs possibles), XeTeX et LuaTeX lisent par défaut les
|
||
fichiers encodés avec UTF-8. Le succès de XeTeX et LuaTeX est dû
|
||
notamment à la possibilité d'y utiliser à la fois les polices
|
||
fournies avec TeX et les polices TrueType ou OpenType plutôt utilisées
|
||
dans les logiciels de traitement de texte traditionnels. Il devient
|
||
ainsi possible de taper des textes multilingues, ou dans les langues à
|
||
idéogrammes sans devoir affronter le casse-tête de la gestion des
|
||
polices avec LaTeX.
|
||
</p>
|
||
|
||
<p>XeTeX permet en outre, grâce à un système appelé TeCKit,
|
||
d'appliquer des filtres aux fichiers sources. Cela permet
|
||
d'utiliser une translittération dans le fichier source tout en
|
||
obtenant les bons caractères dans le fichier d'arrivée.
|
||
</p>
|
||
|
||
<p>Grâce à XeTeX, on a pu ainsi réaliser l'<a href="&url.eleves;annuaire/">Annuaire
|
||
des élèves</a> qui contient quelques citations dans des langues
|
||
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és par Unicode,
|
||
de façon plus ou moins importante.
|
||
Les <a href="#terminaux">émulateurs de
|
||
terminaux</a> comme <code>xterm</code> le sont évidemment. Plus généralement,
|
||
beaucoup de programmes doivent afficher du texte dans des
|
||
langues exotiques, par exemple s'ils ont été conç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èques
|
||
<a href="http://www.gtk.org/"><code>GTK+</code></a> disposent
|
||
naturellement d'un très bon support d'Unicode ; en effet, les
|
||
chaînes de caractères manipulées sont encodées en UTF-8 et la
|
||
bibliothè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ères.
|
||
</p>
|
||
|
||
<h3><a name="fontes">Quelles fontes utiliser pour afficher des caractères
|
||
Unicode ?</a></h3>
|
||
|
||
<p>On peut trouver des <a href="http://www.nongnu.org/freefont/">fontes
|
||
TrueType libres</a> (packagées par la plupart des distributions Linux),
|
||
elles couvrent notamment la plupart des langues utilisées en Europe
|
||
(alphabets latin, cyrillique et grec). Pour utiliser la fonte
|
||
<code>FreeMono</code> dans <code>xterm</code>, en supposant que les
|
||
fontes évoquées ici soient convenablement installées, on peut utiliser la
|
||
commande <code>uxterm -fa FreeMono</code> (pourvu que la version
|
||
de <code>xterm</code> utilisée soit suffisamment récente). Si on veut
|
||
afficher des caractères provenant d'alphabets non couverts par ces
|
||
fontes, il faut évidemment utiliser d'autres fontes... On peut regretter
|
||
que <code>xterm</code> ne soit actuellement pas capable d'utiliser
|
||
plusieurs fontes simultanément (on pourrait lui spécifier une fonte à
|
||
utiliser pour les alphabets latin, cyrillique et grec et une autre fonte
|
||
pour les idéogrammes chinois par exemple) ; en revanche,
|
||
l'é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érer un caractère
|
||
Unicode dans une page Web ?</a></h3>
|
||
|
||
<p>Il y a deux méthodes. La première consiste à utiliser des entités
|
||
HTML : si on insère la chaîne de caractères
|
||
«<code>&#x203d;</code>» dans un fichier HTML, le navigateur
|
||
affiche «‽» comme vous pouvez le constater, si le navigateur
|
||
est en mesure d'afficher ce caractère Unicode, on devrait ainsi voir le
|
||
caractère U+203D INTERROBANG. Pour un caractère Unicode quelconque, il
|
||
suffit de remplacer <code>203d</code> par la représentation en
|
||
hexadécimal du numéro du caractère Unicode. On peut aussi utiliser le
|
||
numéro sous sa forme décimale : <code>&#8253;</code> (‽).
|
||
</p>
|
||
|
||
<p>
|
||
La deuxième méthode consiste à encoder tout le fichier HTML en UTF-8. On
|
||
saisit alors le caractère Unicode comme n'importe quel autre caractère
|
||
(ce qui nécessite d'avoir un <a href="#editeurs">éditeur UTF-8</a>). Cela
|
||
suppose d'avoir convenablement déclaré l'encodage du fichier HTML. Cela
|
||
peut se faire en insérant la balise suivante
|
||
</p>
|
||
<pre>
|
||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" >
|
||
</pre>
|
||
<p class="continue">
|
||
dans les en-têtes du fichier HTML (entre <code><meta></code> et
|
||
<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
|
||
recommandable de définir l'encodage du fichier en faisant de plus
|
||
une déclaration XML sur la première ligne du fichier :
|
||
</p>
|
||
<pre>
|
||
<?xml version="1.0" encoding="UTF-8"?>
|
||
</pre>
|
||
|
||
<p>
|
||
S'il ne s'agit d'insérer qu'une poignée de caractères exotiques, il
|
||
est sans doute plus pratique d'utiliser des entités HTML pour insérer ces
|
||
caractères. S'il y en a beaucoup, il devient commode d'utiliser la
|
||
deuxième méthode pour éditer directement le fichier HTML dans un
|
||
éditeur gérant l'encodage UTF-8. Notons que les deux méthodes ne sont pas
|
||
incompatibles, on peut mettre des entités HTML du type ci-dessus dans un
|
||
fichier HTML, quelque soit son encodage, y compris UTF-8.
|
||
</p>
|
||
|
||
<h3>Mon navigateur Web affiche mal mes caractères
|
||
Unicode. Que faire ?</h3>
|
||
|
||
<p>Certains navigateurs (comme <a
|
||
href="&url.tuteurs;logiciels/mozilla/">Mozilla</a>) permettent de
|
||
spécifier une fonte à utiliser pour tel ou tel groupe de langues. Quand
|
||
on insère du texte dans une langue exotique, on a ainsi intérêt à
|
||
déclarer la langue dans laquelle est écrit le texte, cela permet au
|
||
navigateur de choisir directement la bonne fonte à utiliser pour afficher
|
||
les caractères, au lieu de parcourir toutes les fontes existantes jusqu'à
|
||
en trouver une qui associe un glyphe au numéro Unicode voulu. Ceci peut
|
||
donner des résultats horribles : imaginons que vous ayez un texte en grec
|
||
ancien avec beaucoup d'accents et d'esprits et que la fonte par défaut ne
|
||
contienne que les caractè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ères, la fonte de base utilisée pour les caractères non
|
||
accentués et une autre pour les caractères plus compliqués ; si le
|
||
navigateur est pré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é défini
|
||
dans tuteurs.css provoque un comportement bizarre. -->
|
||
Pour insérer le mot Hindi <a style="text-align: left;"><cite lang="hi"
|
||
xml:lang="hi">बिरयानी</cite></a>
|
||
dont une transcription est « biryânî », on a utilisé le code
|
||
suivant :
|
||
</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 à
|
||
beaucoup d'autres élé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 être un code à 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ères exotiques disposés un
|
||
peu partout que votre navigateur gère parfaitement les langues étrangères
|
||
censément représentées sur la page, si on regarde plus attentivement
|
||
certains détails, il arrive souvent que l'on voie des bugs (problèmes
|
||
dans les fontes de caractères, support rudimentaire de certaines langues,
|
||
mélange disgracieux entre plusieurs fontes de caractè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 ça me marche pas. Que faire ?</a></h3>
|
||
|
||
<p>C'est une très mauvaise idée de vouloir mettre des caractères
|
||
accentués (ou exotiques) dans les noms de fichiers. Le fait de mettre des
|
||
espaces pose déjà des problèmes, des caractères comme «/», «\» ou «:»
|
||
sont prohibés sur certains systèmes de fichiers, alors vouloir mettre
|
||
des accents, ce n'est que chercher des ennuis supplémentaires (notamment
|
||
quand on veut transférer des fichiers sur un autre ordinateur ou sur une
|
||
disquette). Bref, à éviter absolument.</p>
|
||
|
||
<div class="metainformation">
|
||
Auteurs : Joël Riou, Rémy Oudompheng.
|
||
<date value="from git" />
|
||
</div>
|
||
|
||
</body>
|
||
</html>
|