570 lines
26 KiB
XML
570 lines
26 KiB
XML
<?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 : 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>
|
|
|
|
<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 é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>
|
|
|
|
<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>
|
|
|
|
<div class="ens">
|
|
La version 21.3 d'<a href="&url.tuteurs;unix/editeurs/emacs.html">Emacs</a>
|
|
installée actuellement a quelques problè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>
|
|
|
|
<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. 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éros
|
|
de ces glyphes coïncideraient avec les numéros Unicode des caractères.
|
|
Aleph et Lamed permettent
|
|
d'appliquer des filtres au fichier source, on peut ainsi concevoir un
|
|
filtre qui prend en entrée un fichier texte encodé en UTF-8 et le
|
|
convertit en une suite de numéros Unicode. Avec une fonte virtuelle
|
|
du type évoqué précédemment, il n'y aurait plus de grosse difficulté à
|
|
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
|
|
être utilisée pour 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">
|
|
Auteur : Joël Riou.
|
|
Dernière modification le <date value="$Date: 2005-05-29 21:10:02 $" />.
|
|
</div>
|
|
|
|
</body>
|
|
</html>
|