FAQ sur UTF-8
This commit is contained in:
parent
acd028870b
commit
5d98676093
1 changed files with 554 additions and 0 deletions
554
faq/utf8.tml
Normal file
554
faq/utf8.tml
Normal file
|
@ -0,0 +1,554 @@
|
|||
<?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+046C 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 une description de chaque
|
||||
caractère (« a » est décrite par "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>
|
||||
|
||||
<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 recondisé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, 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, 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 des 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 est
|
||||
recommandable de définir l'encodage du fichier en faisant de plus
|
||||
une déclaration XML en tête de 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 encodé en 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-28 23:33:53 $" />.
|
||||
</div>
|
||||
|
||||
</body>
|
||||
</html>
|
Loading…
Reference in a new issue