2009-09-20 12:34:28 +02:00
|
|
|
|
<?xml version="1.0" encoding="UTF-8"?>
|
2003-01-10 16:37:24 +01:00
|
|
|
|
<!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>
|
2009-09-20 12:27:14 +02:00
|
|
|
|
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.
|
2003-01-10 16:37:24 +01:00
|
|
|
|
</p>
|
|
|
|
|
</div>
|
|
|
|
|
|
2009-09-20 12:27:14 +02:00
|
|
|
|
<h2>L'énoncé du problème</h2>
|
2003-01-10 16:37:24 +01:00
|
|
|
|
|
2009-09-20 12:27:14 +02:00
|
|
|
|
<h3>Caractères</h3>
|
2003-01-10 16:37:24 +01:00
|
|
|
|
|
|
|
|
|
<p>
|
2009-09-20 12:27:14 +02:00
|
|
|
|
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.
|
2003-01-10 16:37:24 +01:00
|
|
|
|
</p>
|
|
|
|
|
|
|
|
|
|
<p>
|
2009-09-20 12:27:14 +02:00
|
|
|
|
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
|
2003-01-10 16:37:24 +01:00
|
|
|
|
informations de mise en page. Dans le cas le plus simple, la seule mise en
|
2009-09-20 12:27:14 +02:00
|
|
|
|
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é.
|
2003-01-10 16:37:24 +01:00
|
|
|
|
</p>
|
|
|
|
|
|
|
|
|
|
<p>
|
2009-09-20 12:27:14 +02:00
|
|
|
|
En bref, un texte est une suite de caractères.
|
2003-01-10 16:37:24 +01:00
|
|
|
|
</p>
|
|
|
|
|
|
|
|
|
|
<h3>Fichiers, octets</h3>
|
|
|
|
|
|
|
|
|
|
<p>
|
2009-09-20 12:27:14 +02:00
|
|
|
|
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
|
2003-01-10 16:37:24 +01:00
|
|
|
|
aussi bien les penser comme 256 parfums possibles pour des glaces, ou 256
|
2009-09-20 12:27:14 +02:00
|
|
|
|
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.
|
2003-01-10 16:37:24 +01:00
|
|
|
|
</p>
|
|
|
|
|
|
|
|
|
|
<p>
|
2009-09-20 12:27:14 +02:00
|
|
|
|
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
|
2003-01-10 16:37:24 +01:00
|
|
|
|
simple.
|
|
|
|
|
</p>
|
|
|
|
|
|
2009-09-20 12:27:14 +02:00
|
|
|
|
<h2>Les premières solutions</h2>
|
2003-01-10 16:37:24 +01:00
|
|
|
|
|
|
|
|
|
<h3>Les informaticiens sont joueurs</h3>
|
|
|
|
|
|
|
|
|
|
<p>
|
|
|
|
|
Une des occupations favorites des informaticiens, c'est de mettre dans leurs
|
2009-09-20 12:27:14 +02:00
|
|
|
|
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
|
2003-01-10 16:37:24 +01:00
|
|
|
|
journalistes n'ayant pas compris que 2000 n'est pas du tout un nombre rond
|
2009-09-20 12:27:14 +02:00
|
|
|
|
pour un ordinateur). Le problème de la représentation de textes 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.
|
2003-01-10 16:37:24 +01:00
|
|
|
|
</p>
|
|
|
|
|
|
|
|
|
|
<p>
|
2009-09-20 12:27:14 +02:00
|
|
|
|
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.
|
2003-01-10 16:37:24 +01:00
|
|
|
|
</p>
|
|
|
|
|
|
|
|
|
|
<p>
|
2009-09-20 12:27:14 +02:00
|
|
|
|
À 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.
|
2003-01-10 16:37:24 +01:00
|
|
|
|
</p>
|
|
|
|
|
|
|
|
|
|
<p>
|
2009-09-20 12:27:14 +02:00
|
|
|
|
La solution était donc toute simple : un octet par caractère, un caractère
|
|
|
|
|
par octet, pourquoi se fatiguer ?
|
2003-01-10 16:37:24 +01:00
|
|
|
|
</p>
|
|
|
|
|
|
2009-09-20 12:27:14 +02:00
|
|
|
|
<h3>Les Européens veulent jouer aussi</h3>
|
2003-01-10 16:37:24 +01:00
|
|
|
|
|
|
|
|
|
<p>
|
2009-09-20 12:27:14 +02:00
|
|
|
|
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
|
2003-01-10 16:37:24 +01:00
|
|
|
|
l'ouest.
|
|
|
|
|
</p>
|
|
|
|
|
|
|
|
|
|
<p>
|
2009-09-20 12:27:14 +02:00
|
|
|
|
Dans le même temps, les informaticiens russes ont profité de ces 128
|
2003-01-10 16:37:24 +01:00
|
|
|
|
valeurs pour y caser l'alphabet cyrillique. Les Grecs y ont aussi mis leur
|
|
|
|
|
propre alphabet.
|
|
|
|
|
</p>
|
|
|
|
|
|
|
|
|
|
<p>
|
2009-09-20 12:27:14 +02:00
|
|
|
|
Dans ces 128 valeurs, il n'y a hélas pas la place de caser les caractères
|
2003-01-10 16:37:24 +01:00
|
|
|
|
pour les langues occidentales <em>et</em> l'alphabet cyrillique <em>et</em>
|
2009-09-20 12:27:14 +02:00
|
|
|
|
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
|
2003-01-10 16:37:24 +01:00
|
|
|
|
pas grave.
|
|
|
|
|
</p>
|
|
|
|
|
|
|
|
|
|
<h3>Les encodages</h3>
|
|
|
|
|
|
|
|
|
|
<p>
|
2009-09-20 12:27:14 +02:00
|
|
|
|
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
|
2003-01-10 16:37:24 +01:00
|
|
|
|
grec.
|
|
|
|
|
</p>
|
|
|
|
|
|
|
|
|
|
<p>
|
|
|
|
|
Mais il fallait aussi que les ordinateurs puissent communiquer entre eux
|
2009-09-20 12:27:14 +02:00
|
|
|
|
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
|
2003-01-10 16:37:24 +01:00
|
|
|
|
occidentales, l'ISO-8859-5 qui offre du cyrillique, l'ISO-8859-7, qui
|
|
|
|
|
propose du grec, etc.
|
|
|
|
|
</p>
|
|
|
|
|
|
|
|
|
|
<p>
|
2009-09-20 12:27:14 +02:00
|
|
|
|
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.
|
2003-01-10 16:37:24 +01:00
|
|
|
|
</p>
|
|
|
|
|
|
2009-09-20 12:27:14 +02:00
|
|
|
|
<h3>Et les langues orientales dans tout ça ?</h3>
|
2003-01-10 16:37:24 +01:00
|
|
|
|
|
|
|
|
|
<p>
|
2009-09-20 12:27:14 +02:00
|
|
|
|
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
|
2004-02-23 13:23:30 +01:00
|
|
|
|
(sans compter ceux qui servent pour les noms propres, ni l'alphabet
|
2009-09-20 12:27:14 +02:00
|
|
|
|
syllabique). Ni les 11&thsp;172 syllables coréennes, ni les dizaines de
|
|
|
|
|
milliers d'idéogrammes chinois qu'on arrive à recenser.
|
2003-01-10 16:37:24 +01:00
|
|
|
|
</p>
|
|
|
|
|
|
|
|
|
|
<p>
|
2009-09-20 12:27:14 +02:00
|
|
|
|
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.
|
2003-01-10 16:37:24 +01:00
|
|
|
|
</p>
|
|
|
|
|
|
2009-09-20 12:27:14 +02:00
|
|
|
|
<h3>État des lieux</h3>
|
2003-01-10 16:37:24 +01:00
|
|
|
|
|
|
|
|
|
<p>
|
2009-09-20 12:27:14 +02:00
|
|
|
|
Tout ceci nous amène presque à l'état actuel de l'informatique :
|
2003-01-10 16:37:24 +01:00
|
|
|
|
</p>
|
|
|
|
|
|
|
|
|
|
<ul>
|
2009-09-20 12:27:14 +02:00
|
|
|
|
<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
|
2003-01-10 16:37:24 +01:00
|
|
|
|
utilisent.</li>
|
2009-09-20 12:27:14 +02:00
|
|
|
|
<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>
|
2003-01-10 16:37:24 +01:00
|
|
|
|
</ul>
|
|
|
|
|
|
|
|
|
|
<p>
|
2009-09-20 12:27:14 +02:00
|
|
|
|
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 !
|
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>
|
2009-09-20 12:27:14 +02:00
|
|
|
|
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 : <a href="http://www.unicode.org/">le consortium Unicode</a>.
|
|
|
|
|
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.
|
2003-01-10 16:37:24 +01:00
|
|
|
|
</p>
|
|
|
|
|
|
|
|
|
|
<p>
|
|
|
|
|
Avec Unicode, un texte dans n'importe quelle langue, ou n'importe
|
2009-09-20 12:27:14 +02:00
|
|
|
|
quelle<em>s</em> langue<em>s</em> peut se représenter comme une suite de
|
|
|
|
|
nombres. Quelle simplification !
|
2003-01-10 16:37:24 +01:00
|
|
|
|
</p>
|
|
|
|
|
|
|
|
|
|
<h3>Les nouveaux codages</h3>
|
|
|
|
|
|
|
|
|
|
<p>
|
2007-10-23 11:28:54 +02:00
|
|
|
|
Il est possible d'utiliser directement Unicode pour stocker les textes
|
2009-09-20 12:27:14 +02:00
|
|
|
|
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.
|
2003-01-10 16:37:24 +01:00
|
|
|
|
</p>
|
|
|
|
|
|
|
|
|
|
<p>
|
2009-09-20 12:27:14 +02:00
|
|
|
|
Il existe cependant un autre code largement utilisé avec Unicode. Il
|
2003-01-10 16:37:24 +01:00
|
|
|
|
s'appelle UTF-8. Il est un peu plus complexe, il utilise un nombre variable
|
2009-09-20 12:27:14 +02:00
|
|
|
|
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
|
2003-01-10 16:37:24 +01:00
|
|
|
|
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
|
2009-09-20 12:27:14 +02:00
|
|
|
|
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.
|
2003-01-10 16:37:24 +01:00
|
|
|
|
Un bon logiciel, disais-je, va travailler autant que possible en Unicode. En
|
2009-09-20 12:27:14 +02:00
|
|
|
|
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
|
2003-01-10 16:37:24 +01:00
|
|
|
|
d'autres composants.
|
|
|
|
|
</p>
|
|
|
|
|
|
|
|
|
|
<p>
|
2009-09-20 12:27:14 +02:00
|
|
|
|
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
|
2003-01-10 16:37:24 +01:00
|
|
|
|
pour en faire de l'Unicode. Il les affiche en convertissant dans le bon
|
2009-09-20 12:27:14 +02:00
|
|
|
|
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
|
2003-01-10 16:37:24 +01:00
|
|
|
|
utiliser un encodage plus ancien et simple si possible).
|
|
|
|
|
</p>
|
|
|
|
|
|
|
|
|
|
<p>
|
2009-09-20 12:27:14 +02:00
|
|
|
|
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.
|
2003-01-10 16:37:24 +01:00
|
|
|
|
</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>
|
2009-09-20 12:27:14 +02:00
|
|
|
|
<li><a href="&url.tuteurs;internet/courrier/international.html">Gérer son
|
|
|
|
|
courrier é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">
|
2009-09-27 22:00:55 +02:00
|
|
|
|
Auteur : Nicolas George. <date value="from git" />
|
2003-01-10 16:37:24 +01:00
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
</body>
|
|
|
|
|
</html>
|