2003-01-10 16:37:24 +01: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>Encodages</title>
|
|
|
|
|
</head>
|
|
|
|
|
<body>
|
|
|
|
|
|
|
|
|
|
<h1>L'enfer des langues</h1>
|
|
|
|
|
|
|
|
|
|
<div class="resume">
|
|
|
|
|
<p>
|
|
|
|
|
Dans cette page, nous allons voir quels probl<62>mes se posent quand on veut
|
|
|
|
|
taper diff<66>rentes langues avec un ordinateur, et comment on s'y prend pour
|
|
|
|
|
les r<>soudre de mani<6E>re plus ou moins propre.
|
|
|
|
|
</p>
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
<h2>L'<27>nonc<6E> du probl<62>me</h2>
|
|
|
|
|
|
|
|
|
|
<h3>Caract<63>res</h3>
|
|
|
|
|
|
|
|
|
|
<p>
|
|
|
|
|
Un texte dans une langue quelconque peut se d<>composer en une suite de
|
|
|
|
|
<em>caract<63>res</em>. La notion n'est pas parfaitement d<>finie, mais peu
|
|
|
|
|
importe en fait, en g<>n<EFBFBD>ral il n'y a pas de probl<62>me. En fran<61>ais, les
|
|
|
|
|
caract<EFBFBD>res sont les lettres, les chiffres, la ponctuation, les espaces. Le
|
|
|
|
|
O-E-dans-l'O est un caract<63>re <20> part enti<74>re, parce qu'il a une existence
|
|
|
|
|
propre dans l'orthographe de la langue. De m<>me, les majuscules et le
|
|
|
|
|
minuscules sont des caract<63>res distincts. En revanche, le gras et l'italique
|
|
|
|
|
ne constituent pas une distinction sur les caract<63>res.
|
|
|
|
|
</p>
|
|
|
|
|
|
|
|
|
|
<p>
|
|
|
|
|
Lorsqu'on s'adresse <20> un ordinateur pour taper du texte, ce sont
|
|
|
|
|
essentiellement des caract<63>res qu'on lui communique. Selon le logiciel
|
|
|
|
|
employ<EFBFBD>, il pourra se glisser ou pas dans cette suite de caract<63>res des
|
|
|
|
|
informations de mise en page. Dans le cas le plus simple, la seule mise en
|
|
|
|
|
forme qui intervient est le retour <20> la ligne. Dans ce cas particulier, il y
|
2007-07-17 12:01:59 +02:00
|
|
|
|
a un <20><>caract<63>re<72><65> sp<73>cial retour <20> la ligne. Ce caract<63>re existe parce
|
2003-01-10 16:37:24 +01:00
|
|
|
|
qu'il est tr<74>s utile pour les fichiers qui ne peuvent contenir que des
|
|
|
|
|
caract<EFBFBD>res, et aucune autre mise en forme. Il n'existe en g<>n<EFBFBD>ral pas de
|
|
|
|
|
caract<EFBFBD>re d<>di<64> <20> d'autres mises en forme, comme le gras et l'italique, tout
|
|
|
|
|
d<EFBFBD>pend du logiciel utilis<69>.
|
|
|
|
|
</p>
|
|
|
|
|
|
|
|
|
|
<p>
|
|
|
|
|
En bref, un texte est une suite de caract<63>res.
|
|
|
|
|
</p>
|
|
|
|
|
|
|
|
|
|
<h3>Fichiers, octets</h3>
|
|
|
|
|
|
|
|
|
|
<p>
|
|
|
|
|
Depuis le temps, vous savez probablement d<>j<EFBFBD> qu'un fichier sur un
|
|
|
|
|
ordinateur n'est ni plus ni moins qu'une suite d'<em>octets</em>, c'est <20>
|
|
|
|
|
dire en quelque sorte des nombres entre 0 et 255. <20> vrai dire, on pourrait
|
|
|
|
|
aussi bien les penser comme 256 parfums possibles pour des glaces, ou 256
|
2007-07-17 12:01:59 +02:00
|
|
|
|
couleurs possibles<65>: il y a 256 valeurs possibles, on peut les voir comme
|
2003-01-10 16:37:24 +01:00
|
|
|
|
des nombres si on veut (et dans ce cas il y a une mani<6E>re naturelle de le
|
|
|
|
|
faire), ou comme autre chose si on pr<70>f<EFBFBD>re.
|
|
|
|
|
</p>
|
|
|
|
|
|
|
|
|
|
<p>
|
|
|
|
|
Toute la difficult<6C> r<>side dans le fait de repr<70>senter une suite de
|
|
|
|
|
caract<EFBFBD>res par une suite d'octets. Nous allons voir que ce n'est pas si
|
|
|
|
|
simple.
|
|
|
|
|
</p>
|
|
|
|
|
|
|
|
|
|
<h2>Les premi<6D>res solutions</h2>
|
|
|
|
|
|
|
|
|
|
<h3>Les informaticiens sont joueurs</h3>
|
|
|
|
|
|
|
|
|
|
<p>
|
|
|
|
|
Une des occupations favorites des informaticiens, c'est de mettre dans leurs
|
|
|
|
|
programmes des limites arbitraires qui vont plus tard poser des probl<62>mes
|
2007-07-17 12:01:59 +02:00
|
|
|
|
sans fin. Une telle impr<70>voyance a d<>fray<61> la chronique il y a peu<65>: le
|
2003-01-10 16:37:24 +01:00
|
|
|
|
fameux bug de l'an 2000 (sauf que <20>a a fait un flop monumental, les
|
|
|
|
|
journalistes n'ayant pas compris que 2000 n'est pas du tout un nombre rond
|
2003-10-10 23:20:29 +02:00
|
|
|
|
pour un ordinateur). Le probl<62>me de la repr<70>sentation de textes est
|
|
|
|
|
probablement le domaine o<> elle se fait le plus cruellement sentir, et le
|
|
|
|
|
probl<EFBFBD>me n'est pas encore pr<70>s d'<27>tre compl<70>tement r<>solu.
|
2003-01-10 16:37:24 +01:00
|
|
|
|
</p>
|
|
|
|
|
|
|
|
|
|
<p>
|
2007-07-17 12:01:59 +02:00
|
|
|
|
Tout commence par une constatation tr<74>s simple<6C>: les premiers
|
2003-01-10 16:37:24 +01:00
|
|
|
|
informaticiens parlaient anglais. Et l'anglais s'<27>crit avec pas grand
|
2007-07-17 12:01:59 +02:00
|
|
|
|
chose<EFBFBD>: deux fois 26 lettres, 10 chiffres, une trentaine de signes de
|
|
|
|
|
ponctuation, de signes math<74>matiques, sans oublier le symbole dollar<61>: avec
|
2003-01-10 16:37:24 +01:00
|
|
|
|
95 caract<63>res au total on peut se d<>brouiller.
|
|
|
|
|
</p>
|
|
|
|
|
|
|
|
|
|
<p>
|
|
|
|
|
<EFBFBD> l'<27>poque dont je parle, on ne pouvait utiliser que la moiti<74> des octets,
|
2007-07-17 12:01:59 +02:00
|
|
|
|
soit 128 valeurs. On en a pris 33 comme caract<63>res de <20><>contr<74>le<6C><65> (dont
|
2003-01-10 16:37:24 +01:00
|
|
|
|
le retour <20> la ligne, plus des trucs plus exotiques, comme faire sonner la
|
|
|
|
|
machine, ou des codes bizarres pour d<>placer le curseur), plus les 95 dont
|
|
|
|
|
on avait besoin pour <20>crire l'anglais. On a num<75>rot<6F> tout <20>a, <20>a a donn<6E> le
|
2007-07-17 12:01:59 +02:00
|
|
|
|
code <abbr lang="en_US" title="American Standard Code for Information Interchange">ASCII</abbr><3E>:
|
2003-01-10 16:37:24 +01:00
|
|
|
|
une correspondance entre les octets de 0 <20> 127 avec des codes de contr<74>le et
|
|
|
|
|
les 95 caract<63>res utiles pour taper de l'anglais.
|
|
|
|
|
</p>
|
|
|
|
|
|
|
|
|
|
<p>
|
2007-07-17 12:01:59 +02:00
|
|
|
|
La solution <20>tait donc toute simple<6C>: un octet par caract<63>re, un caract<63>re
|
|
|
|
|
par octet, pourquoi se fatiguer<65>?
|
2003-01-10 16:37:24 +01:00
|
|
|
|
</p>
|
|
|
|
|
|
|
|
|
|
<h3>Les Europ<6F>ens veulent jouer aussi</h3>
|
|
|
|
|
|
|
|
|
|
<p>
|
|
|
|
|
Bien s<>r, au bout d'un moment, il y a des gens qui ont eu envie de pouvoir
|
|
|
|
|
taper du fran<61>ais ou de l'allemand sur leur ordinateur. Heureusement, entre
|
|
|
|
|
temps, il <20>tait devenu possible d'utiliser les valeurs laiss<73>es de c<>t<EFBFBD> par
|
|
|
|
|
l'ASCII. Dans cette place, il a <20>t<EFBFBD> possible de caser les caract<63>res
|
|
|
|
|
accentu<EFBFBD>s et divers autres symboles utilis<69>s par les langues d'europe de
|
|
|
|
|
l'ouest.
|
|
|
|
|
</p>
|
|
|
|
|
|
|
|
|
|
<p>
|
|
|
|
|
Dans le m<>me temps, les informaticiens russes ont profit<69> de ces 128
|
|
|
|
|
valeurs pour y caser l'alphabet cyrillique. Les Grecs y ont aussi mis leur
|
|
|
|
|
propre alphabet.
|
|
|
|
|
</p>
|
|
|
|
|
|
|
|
|
|
<p>
|
|
|
|
|
Dans ces 128 valeurs, il n'y a h<>las pas la place de caser les caract<63>res
|
|
|
|
|
pour les langues occidentales <em>et</em> l'alphabet cyrillique <em>et</em>
|
|
|
|
|
l'alphabet grec <em>et</em> l'alphabet h<>breu. Mais ce n'est pas grave. En
|
2007-07-17 12:01:59 +02:00
|
|
|
|
France, on tape du fran<61>ais, pas du grec<65>; en Gr<47>ce on tape du grec, pas du
|
|
|
|
|
Cyrillique<EFBFBD>; en Russie on tape du cyrillique, pas du fran<61>ais. Les
|
2003-01-10 16:37:24 +01:00
|
|
|
|
ordinateurs <20>taient configur<75>s pour que le clavier envoie certains codes,
|
|
|
|
|
que l'<27>cran affiche certains caract<63>res, et que tout marche bien comme <20>a.
|
|
|
|
|
Bien s<>r <20>a ne marche plus du tout si on franchit la fronti<74>re, ou si on va
|
|
|
|
|
chez le voisin qui a un ordinateur d'une marque diff<66>rente, mais ce n'est
|
|
|
|
|
pas grave.
|
|
|
|
|
</p>
|
|
|
|
|
|
|
|
|
|
<h3>Les encodages</h3>
|
|
|
|
|
|
|
|
|
|
<p>
|
|
|
|
|
Non, bien s<>r, tout ceci ne pouvait pas durer. Pour le probl<62>me de pouvoir
|
2007-07-17 12:01:59 +02:00
|
|
|
|
taper plusieurs langues sur un m<>me ordinateur, la solution est simple<6C>: il
|
2003-01-10 16:37:24 +01:00
|
|
|
|
suffit d'<27>tiqueter chaque fichier, celui-ci est en fran<61>ais, celui-ci en
|
|
|
|
|
grec.
|
|
|
|
|
</p>
|
|
|
|
|
|
|
|
|
|
<p>
|
|
|
|
|
Mais il fallait aussi que les ordinateurs puissent communiquer entre eux
|
|
|
|
|
m<EFBFBD>me en <20>tant de marques diff<66>rentes. Donc au lieu que chaque fabricant
|
|
|
|
|
invente sa propre correspondance entre octets et caract<63>res, des organismes
|
|
|
|
|
de standardisation s'y sont mis. <20>a a donn<6E> des tables de correspondance,
|
|
|
|
|
comme l'ISO-8859-1, qui propose un jeu de caract<63>res pour les langues
|
|
|
|
|
occidentales, l'ISO-8859-5 qui offre du cyrillique, l'ISO-8859-7, qui
|
|
|
|
|
propose du grec, etc.
|
|
|
|
|
</p>
|
|
|
|
|
|
|
|
|
|
<p>
|
|
|
|
|
Tous les probl<62>mes n'<27>taient pas r<>solus, mais au moins il suffit d'indiquer
|
|
|
|
|
au d<>but d'un texte le nom de l'encodage qu'il utilise, et pour peu qu'on
|
|
|
|
|
ait les bonnes polices de caract<63>res, on peut le lire sans probl<62>me.
|
|
|
|
|
</p>
|
|
|
|
|
|
2007-07-17 12:01:59 +02:00
|
|
|
|
<h3>Et les langues orientales dans tout <20>a<EFBFBD>?</h3>
|
2003-01-10 16:37:24 +01:00
|
|
|
|
|
|
|
|
|
<p>
|
|
|
|
|
Bon, tout <20>a c'est tr<74>s bien, mais m<>me en tassant tr<74>s fort, on n'arrivera
|
2004-02-23 13:23:30 +01:00
|
|
|
|
pas <20> faire rentrer les 1945 id<69>ogrammes du japonais officiel dans un octet
|
|
|
|
|
(sans compter ceux qui servent pour les noms propres, ni l'alphabet
|
|
|
|
|
syllabique). Ni les 11&thsp;172 syllables cor<6F>ennes, ni les dizaines de
|
|
|
|
|
milliers d'id<69>ogrammes chinois qu'on arrive <20> recenser.
|
2003-01-10 16:37:24 +01:00
|
|
|
|
</p>
|
|
|
|
|
|
|
|
|
|
<p>
|
|
|
|
|
Les informaticiens orientaux ont donc d<> inventer leurs propres m<>thodes,
|
|
|
|
|
des codages qui abandonnaient la correspondance un octet = un caract<63>re.
|
|
|
|
|
Bien s<>r, si vous croyez que les informaticiens japonais ont fait un code
|
|
|
|
|
qui permet de faire aussi du chinois, ou le contraire, vous <20>tes un
|
|
|
|
|
ind<EFBFBD>crotable id<69>aliste qui n'a rien compris <20> l'informatique.
|
|
|
|
|
</p>
|
|
|
|
|
|
|
|
|
|
<h3><3E>tat des lieux</h3>
|
|
|
|
|
|
|
|
|
|
<p>
|
2007-07-17 12:01:59 +02:00
|
|
|
|
Tout ceci nous am<61>ne presque <20> l'<27>tat actuel de l'informatique<75>:
|
2003-01-10 16:37:24 +01:00
|
|
|
|
</p>
|
|
|
|
|
|
|
|
|
|
<ul>
|
2007-07-17 12:01:59 +02:00
|
|
|
|
<li>Pour les langues <20><>simples<65><73>, un codage standard avec un octet par
|
2003-01-10 16:37:24 +01:00
|
|
|
|
caract<63>re est utilis<69>.</li>
|
|
|
|
|
<li>Les textes sont <20>ventuellement <20>tiquet<65>s par l'encodage qu'ils
|
|
|
|
|
utilisent.</li>
|
|
|
|
|
<li>Les logiciels occidentaux sont profond<6E>ment li<6C>s <20> la correspondance un
|
|
|
|
|
octet = un caract<63>re.</li>
|
|
|
|
|
<li>Les logiciels orientaux utilisent de mani<6E>re tr<74>s fig<69>e un syst<73>me
|
|
|
|
|
sp<73>cifique <20> une langue.</li>
|
|
|
|
|
</ul>
|
|
|
|
|
|
|
|
|
|
<p>
|
|
|
|
|
Ce qui manque <20> tout <20>a, c'est la possibilit<69> qu'un m<>me texte (et dans
|
|
|
|
|
certains cas un m<>me logiciel) contienne simultan<61>ment plusieurs langues
|
|
|
|
|
couvertes par des encodages diff<66>rents. Militons pour le droit des
|
|
|
|
|
universitaires russes de faire des th<74>ses sur les traductions de la Bible de
|
2007-07-17 12:01:59 +02:00
|
|
|
|
l'h<>breu au grec<65>!
|
2003-01-10 16:37:24 +01:00
|
|
|
|
</p>
|
|
|
|
|
|
2004-08-24 04:59:45 +02:00
|
|
|
|
<h2><a name="unicode">Unicode</a></h2>
|
2003-01-10 16:37:24 +01:00
|
|
|
|
|
|
|
|
|
<h3>Le but du projet</h3>
|
|
|
|
|
|
|
|
|
|
<p>
|
|
|
|
|
Pour r<>soudre <em>durablement</em> tous ces probl<62>mes de langues, il s'est
|
|
|
|
|
form<EFBFBD> un consortium, qui regroupe de grands noms de l'informatique et de la
|
2007-07-17 12:01:59 +02:00
|
|
|
|
linguistique<EFBFBD>: <a href="http://www.unicode.org/">le consortium Unicode</a>.
|
|
|
|
|
Sa t<>che<68>: recenser et num<75>roter
|
2003-01-10 16:37:24 +01:00
|
|
|
|
tous les caract<63>res existant dans toutes les langues du monde. Au moment o<>
|
|
|
|
|
j'<27>cris ces lignes, le standard publi<6C> comporte presque 60&thsp;000
|
|
|
|
|
caract<EFBFBD>res.
|
|
|
|
|
</p>
|
|
|
|
|
|
|
|
|
|
<p>
|
|
|
|
|
Avec Unicode, un texte dans n'importe quelle langue, ou n'importe
|
|
|
|
|
quelle<em>s</em> langue<em>s</em> peut se repr<70>senter comme une suite de
|
2007-07-17 12:01:59 +02:00
|
|
|
|
nombres. Quelle simplification<6F>!
|
2003-01-10 16:37:24 +01:00
|
|
|
|
</p>
|
|
|
|
|
|
|
|
|
|
<h3>Les nouveaux codages</h3>
|
|
|
|
|
|
|
|
|
|
<p>
|
|
|
|
|
Il est possible d'utiliser directement Unicode pour stoquer les textes
|
2007-07-17 12:01:59 +02:00
|
|
|
|
informatiques, en utilisant plusieurs octets pour codes les caract<63>res<65>: on
|
2003-01-10 16:37:24 +01:00
|
|
|
|
appelle ce code UCS-4 parce qu'il utilise 4 octets par caract<63>res, le
|
|
|
|
|
consortium Unicode ayant pr<70>vu que deux milliards de caract<63>res ne seraient
|
|
|
|
|
pas atteints dans l'imm<6D>diat.
|
|
|
|
|
</p>
|
|
|
|
|
|
|
|
|
|
<p>
|
|
|
|
|
Il existe cependant un autre code largement utilis<69> avec Unicode. Il
|
|
|
|
|
s'appelle UTF-8. Il est un peu plus complexe, il utilise un nombre variable
|
2007-07-17 12:01:59 +02:00
|
|
|
|
d'octets par caract<63>res, mais pr<70>sente certains avantages<65>: il est
|
2003-01-10 16:37:24 +01:00
|
|
|
|
compatible avec l'ASCII, de sorte que les parties <20>crites avec l'alphabet
|
|
|
|
|
latin de base d'un texte cod<6F> en UTF-8 seront <20> peu pr<70>s lisibles m<>me avec
|
|
|
|
|
un logiciel qui ne comprend pas ce codage.
|
|
|
|
|
</p>
|
|
|
|
|
|
|
|
|
|
<h3>Comment marchent les bons logiciels</h3>
|
|
|
|
|
|
|
|
|
|
<p>
|
|
|
|
|
Un bon logiciel est maintenant un logiciel qui permet de travailler avec
|
|
|
|
|
Unicode. Enfin, l<>, je parle des logiciels qui ont <20> g<>rer du texte, hein,
|
|
|
|
|
un D<>mineur peut tr<74>s bien continuer <20> d<>miner sans se soucier d'Unicode.
|
|
|
|
|
Un bon logiciel, disais-je, va travailler autant que possible en Unicode. En
|
|
|
|
|
interne, ses donn<6E>es seront probablement cod<6F>es uniquement en UCS-4 ou UTF-8
|
|
|
|
|
selon ce qu'il en fait, mais <20>a n'a pas besoin d'<27>tre visible. L'important
|
|
|
|
|
est qu'il saura jongler entre les diff<66>rents encodages pour communiquer avec
|
|
|
|
|
d'autres composants.
|
|
|
|
|
</p>
|
|
|
|
|
|
|
|
|
|
<p>
|
|
|
|
|
Prenons l'exemple d'un logiciel de courrier <20>lectronique. Les courrier re<72>us
|
2007-07-17 12:01:59 +02:00
|
|
|
|
comportent une indication de leur codage<67>: hop, le logiciel se d<>brouille
|
2003-01-10 16:37:24 +01:00
|
|
|
|
pour en faire de l'Unicode. Il les affiche en convertissant dans le bon
|
|
|
|
|
codage pour le syst<73>me graphique ou le terminal dans lequel il tourne. Quand
|
|
|
|
|
on veut r<>pondre, il pr<70>pare la citation dans le bon encodage pour
|
|
|
|
|
l'<27>diteur, puis r<>cup<75>re le texte ainsi <20>dit<69> et le reconvertit. <20> l'envoi,
|
|
|
|
|
il va choisir le meilleur encodage, en tenant compte des n<>cessit<69>s (les
|
|
|
|
|
caract<EFBFBD>res utilis<69>s dans le courrier), et du fait que le destinataire n'a
|
|
|
|
|
pas forc<72>ment un logiciel qui comprend unicode (et donc il vaut mieux
|
|
|
|
|
utiliser un encodage plus ancien et simple si possible).
|
|
|
|
|
</p>
|
|
|
|
|
|
|
|
|
|
<p>
|
|
|
|
|
Tout ceci est un peu compliqu<71>, parce que le logiciel est <20> l'interface
|
|
|
|
|
entre le r<>seau, l'utilisateur et l'<27>diteur de texte, qui peuvent chacun
|
|
|
|
|
utiliser un encodage diff<66>rent. <20> terme, ce sera probablement de l'UTF-8 de
|
|
|
|
|
tous les c<>t<EFBFBD>s, et ce sera plus simple.
|
|
|
|
|
</p>
|
|
|
|
|
|
|
|
|
|
<h2>En pratique</h2>
|
|
|
|
|
|
|
|
|
|
<ul>
|
2003-10-07 18:32:49 +02:00
|
|
|
|
<li><a href="&url.tuteurs;unix/editeurs/unicode.html">Taper de l'Unicode
|
|
|
|
|
avec Vim ou Emacs (ou dans un terminal)</a></li>
|
|
|
|
|
<li><a href="&url.tuteurs;internet/courrier/international.html">G<>rer son
|
|
|
|
|
courrier <20>lectronique en Unicode avec Mutt</a></li>
|
2004-04-12 19:58:01 +02:00
|
|
|
|
<li><a href="&url.tuteurs;logiciels/latex/langues.html">Taper du LaTeX en
|
|
|
|
|
Unicode</a></li>
|
2003-01-10 16:37:24 +01:00
|
|
|
|
</ul>
|
|
|
|
|
|
|
|
|
|
<div class="metainformation">
|
2007-07-17 12:01:59 +02:00
|
|
|
|
Auteur<EFBFBD>: Nicolas George. Derni<6E>re modification le <date value="$Date: 2007-07-17 10:03:06 $." />.
|
2003-01-10 16:37:24 +01:00
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
</body>
|
|
|
|
|
</html>
|