Ajout d'une page sur les encodages.
This commit is contained in:
parent
3ea248cbfc
commit
c4c51e633e
2 changed files with 311 additions and 3 deletions
296
theorie/encodages.tml
Normal file
296
theorie/encodages.tml
Normal file
|
@ -0,0 +1,296 @@
|
|||
<?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èmes se posent quand on veut
|
||||
taper différentes langues avec un ordinateur, et comment on s'y prend pour
|
||||
les résoudre de manière plus ou moins propre.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<h2>L'énoncé du problème</h2>
|
||||
|
||||
<h3>Caractères</h3>
|
||||
|
||||
<p>
|
||||
Un texte dans une langue quelconque peut se décomposer en une suite de
|
||||
<em>caractères</em>. La notion n'est pas parfaitement définie, mais peu
|
||||
importe en fait, en général il n'y a pas de problème. En français, les
|
||||
caractères sont les lettres, les chiffres, la ponctuation, les espaces. Le
|
||||
O-E-dans-l'O est un caractère à part entiè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ères distincts. En revanche, le gras et l'italique
|
||||
ne constituent pas une distinction sur les caractères.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Lorsqu'on s'adresse à un ordinateur pour taper du texte, ce sont
|
||||
essentiellement des caractères qu'on lui communique. Selon le logiciel
|
||||
employé, il pourra se glisser ou pas dans cette suite de caractères des
|
||||
informations de mise en page. Dans le cas le plus simple, la seule mise en
|
||||
forme qui intervient est le retour à la ligne. Dans ce cas particulier, il y
|
||||
a un « caractère » spécial retour à la ligne. Ce caractère existe parce
|
||||
qu'il est très utile pour les fichiers qui ne peuvent contenir que des
|
||||
caractères, et aucune autre mise en forme. Il n'existe en général pas de
|
||||
caractère dédié à d'autres mises en forme, comme le gras et l'italique, tout
|
||||
dépend du logiciel utilisé.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
En bref, un texte est une suite de caractères.
|
||||
</p>
|
||||
|
||||
<h3>Fichiers, octets</h3>
|
||||
|
||||
<p>
|
||||
Depuis le temps, vous savez probablement déjà qu'un fichier sur un
|
||||
ordinateur n'est ni plus ni moins qu'une suite d'<em>octets</em>, c'est à
|
||||
dire en quelque sorte des nombres entre 0 et 255. À vrai dire, on pourrait
|
||||
aussi bien les penser comme 256 parfums possibles pour des glaces, ou 256
|
||||
couleurs possibles : il y a 256 valeurs possibles, on peut les voir comme
|
||||
des nombres si on veut (et dans ce cas il y a une manière naturelle de le
|
||||
faire), ou comme autre chose si on préfère.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Toute la difficulté réside dans le fait de représenter une suite de
|
||||
caractères par une suite d'octets. Nous allons voir que ce n'est pas si
|
||||
simple.
|
||||
</p>
|
||||
|
||||
<h2>Les premiè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èmes
|
||||
sans fin. Une telle imprévoyance a défrayé la chronique il y a peu : le
|
||||
fameux bug de l'an 2000 (sauf que ça a fait un flop monumental, les
|
||||
journalistes n'ayant pas compris que 2000 n'est pas du tout un nombre rond
|
||||
pour un ordinateur). Le problème de la représentation est probablement le
|
||||
domaine où elle se fait le plus cruellement sentir, et le problème n'est pas
|
||||
encore près d'être complètement résolu.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Tout commence par une constatation très simple : les premiers
|
||||
informaticiens parlaient anglais. Et l'anglais s'écrit avec pas grand
|
||||
chose : deux fois 26 lettres, 10 chiffres, une trentaine de signes de
|
||||
ponctuation, de signes mathématiques, sans oublier le symbole dollar : avec
|
||||
95 caractères au total on peut se débrouiller.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
À l'époque dont je parle, on ne pouvait utiliser que la moitié des octets,
|
||||
soit 128 valeurs. On en a pris 33 comme caractères de « contrôle » (dont
|
||||
le retour à 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 écrire l'anglais. On a numéroté tout ça, ça a donné le
|
||||
code <abbr lang="en_US" title="American Standard Code for Information Interchange">ASCII</abbr> :
|
||||
une correspondance entre les octets de 0 à 127 avec des codes de contrôle et
|
||||
les 95 caractères utiles pour taper de l'anglais.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
La solution était donc toute simple : un octet par caractère, un caractère
|
||||
par octet, pourquoi se fatiguer ?
|
||||
</p>
|
||||
|
||||
<h3>Les Europé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çais ou de l'allemand sur leur ordinateur. Heureusement, entre
|
||||
temps, il était devenu possible d'utiliser les valeurs laissées de côté par
|
||||
l'ASCII. Dans cette place, il a été possible de caser les caractères
|
||||
accentués et divers autres symboles utilisés par les langues d'europe de
|
||||
l'ouest.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Dans le même temps, les informaticiens russes ont profité 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è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
|
||||
France, on tape du français, pas du grec ; en Grèce on tape du grec, pas du
|
||||
Cyrillique ; en Russie on tape du cyrillique, pas du français. Les
|
||||
ordinateurs étaient configurés pour que le clavier envoie certains codes,
|
||||
que l'écran affiche certains caractères, et que tout marche bien comme ça.
|
||||
Bien sûr ça ne marche plus du tout si on franchit la frontière, ou si on va
|
||||
chez le voisin qui a un ordinateur d'une marque diffé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ème de pouvoir
|
||||
taper plusieurs langues sur un même ordinateur, la solution est simple : il
|
||||
suffit d'étiqueter chaque fichier, celui-ci est en français, celui-ci en
|
||||
grec.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Mais il fallait aussi que les ordinateurs puissent communiquer entre eux
|
||||
même en étant de marques différentes. Donc au lieu que chaque fabricant
|
||||
invente sa propre correspondance entre octets et caractères, des organismes
|
||||
de standardisation s'y sont mis. Ça a donné des tables de correspondance,
|
||||
comme l'ISO-8859-1, qui propose un jeu de caractè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èmes n'é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ères, on peut le lire sans problème.
|
||||
</p>
|
||||
|
||||
<h3>Et les langues orientales dans tout ça ?</h3>
|
||||
|
||||
<p>
|
||||
Bon, tout ça c'est très bien, mais même en tassant très fort, on n'arrivera
|
||||
pas à faire rentrer les 1945 idéogrammes du japonais officiel dans un octet.
|
||||
Ni les 11&thsp;172 syllables coréennes, ni les dizaines de milliers
|
||||
d'idéogrammes chinois qu'on arrive à recenser.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Les informaticiens orientaux ont donc dû inventer leurs propres méthodes,
|
||||
des codages qui abandonnaient la correspondance un octet = un caractè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 êtes un
|
||||
indécrotable idéaliste qui n'a rien compris à l'informatique.
|
||||
</p>
|
||||
|
||||
<h3>État des lieux</h3>
|
||||
|
||||
<p>
|
||||
Tout ceci nous amène presque à l'état actuel de l'informatique :
|
||||
</p>
|
||||
|
||||
<ul>
|
||||
<li>Pour les langues « simples », un codage standard avec un octet par
|
||||
caractère est utilisé.</li>
|
||||
<li>Les textes sont éventuellement étiquetés par l'encodage qu'ils
|
||||
utilisent.</li>
|
||||
<li>Les logiciels occidentaux sont profondément liés à la correspondance un
|
||||
octet = un caractère.</li>
|
||||
<li>Les logiciels orientaux utilisent de manière très figée un système
|
||||
spécifique à une langue.</li>
|
||||
</ul>
|
||||
|
||||
<p>
|
||||
Ce qui manque à tout ça, c'est la possibilité qu'un même texte (et dans
|
||||
certains cas un même logiciel) contienne simultanément plusieurs langues
|
||||
couvertes par des encodages différents. Militons pour le droit des
|
||||
universitaires russes de faire des thèses sur les traductions de la Bible de
|
||||
l'hébreu au grec !
|
||||
</p>
|
||||
|
||||
<h2>Unicode</h2>
|
||||
|
||||
<h3>Le but du projet</h3>
|
||||
|
||||
<p>
|
||||
Pour résoudre <em>durablement</em> tous ces problèmes de langues, il s'est
|
||||
formé un consortium, qui regroupe de grands noms de l'informatique et de la
|
||||
linguistique : le consortium Unicode. Sa tâche : recenser et numéroter
|
||||
tous les caractères existant dans toutes les langues du monde. Au moment où
|
||||
j'écris ces lignes, le standard publié comporte presque 60&thsp;000
|
||||
caractè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ésenter comme une suite de
|
||||
nombres. Quelle simplification !
|
||||
</p>
|
||||
|
||||
<h3>Les nouveaux codages</h3>
|
||||
|
||||
<p>
|
||||
Il est possible d'utiliser directement Unicode pour stoquer les textes
|
||||
informatiques, en utilisant plusieurs octets pour codes les caractères : on
|
||||
appelle ce code UCS-4 parce qu'il utilise 4 octets par caractères, le
|
||||
consortium Unicode ayant prévu que deux milliards de caractères ne seraient
|
||||
pas atteints dans l'immédiat.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Il existe cependant un autre code largement utilisé avec Unicode. Il
|
||||
s'appelle UTF-8. Il est un peu plus complexe, il utilise un nombre variable
|
||||
d'octets par caractères, mais présente certains avantages : il est
|
||||
compatible avec l'ASCII, de sorte que les parties écrites avec l'alphabet
|
||||
latin de base d'un texte codé en UTF-8 seront à peu prè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 à gérer du texte, hein,
|
||||
un Démineur peut très bien continuer à déminer sans se soucier d'Unicode.
|
||||
Un bon logiciel, disais-je, va travailler autant que possible en Unicode. En
|
||||
interne, ses données seront probablement codées uniquement en UCS-4 ou UTF-8
|
||||
selon ce qu'il en fait, mais ça n'a pas besoin d'être visible. L'important
|
||||
est qu'il saura jongler entre les différents encodages pour communiquer avec
|
||||
d'autres composants.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Prenons l'exemple d'un logiciel de courrier électronique. Les courrier reçus
|
||||
comportent une indication de leur codage : hop, le logiciel se débrouille
|
||||
pour en faire de l'Unicode. Il les affiche en convertissant dans le bon
|
||||
codage pour le système graphique ou le terminal dans lequel il tourne. Quand
|
||||
on veut répondre, il prépare la citation dans le bon encodage pour
|
||||
l'éditeur, puis récupère le texte ainsi édité et le reconvertit. À l'envoi,
|
||||
il va choisir le meilleur encodage, en tenant compte des nécessités (les
|
||||
caractères utilisés dans le courrier), et du fait que le destinataire n'a
|
||||
pas forcé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é, parce que le logiciel est à l'interface
|
||||
entre le réseau, l'utilisateur et l'éditeur de texte, qui peuvent chacun
|
||||
utiliser un encodage différent. À terme, ce sera probablement de l'UTF-8 de
|
||||
tous les côtés, et ce sera plus simple.
|
||||
</p>
|
||||
|
||||
<h2>En pratique</h2>
|
||||
|
||||
<p>
|
||||
D'ici quelques temps, nous aurons des textes décrivant la marche à suivre,
|
||||
en pratique pour :
|
||||
</p>
|
||||
|
||||
<ul>
|
||||
<li>taper en Unicode avec Vim ou Emacs, et dans un terminal en général,</li>
|
||||
<li>utiliser le logiciel de courrier Mutt avec Unicode,</li>
|
||||
<li>taper du LaTeX en Unicode.</li>
|
||||
</ul>
|
||||
|
||||
<div class="metainformation">
|
||||
Auteur : Nicolas George. Dernière modification le 2003-01-09.
|
||||
</div>
|
||||
|
||||
</body>
|
||||
</html>
|
|
@ -11,9 +11,21 @@
|
|||
<h1>Pages théoriques</h1>
|
||||
|
||||
<p>
|
||||
Pour l'instant, pas grand chose : seulement une <a href="images.ps.gz">documentation
|
||||
(<code>.ps.gz</code>) sur le traitement d'images (écrite par David
|
||||
Monniaux)</a>.
|
||||
Cette section regroupe des explications théoriques, sans application directe
|
||||
à une tâche bien précise. Bien comprendre ce qui se passe quand on utilise
|
||||
certains logiciels est souvent un avantage pour arriver à ce qu'on veut, et
|
||||
surtout bien se rappeler la marche à suivre.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
<a href="encodages.html">L'enfer des langues</a>, ou comment un ordinateur
|
||||
peut représenter dans ses fichiers des textes dans les différentes langues
|
||||
du monde.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Une <a href="images.ps.gz">documentation (<code>.ps.gz</code>)
|
||||
sur le traitement d'images</a> (écrite par David Monniaux).
|
||||
</p>
|
||||
|
||||
<div class="metainformation">
|
||||
|
|
Loading…
Add table
Reference in a new issue