1. Latin 1 et autres jeux 8 bits adaptés au français
Les quelques tables de caractères regroupées sur cette page sont
celles que l'on rencontre le plus souvent sur des ordinateurs dont
la langue par défaut est le français.
Ce sont toutes des tables « 8 bits », c'est-à-dire que chaque
caractère est représenté par un et un seul octet, ce qui fait donc
un maximum de 256 caractères différents par table
(2 à la puissance 8).
Bien entendu, ces tables ne sont pas limitées au français. Par exemple,
d'après La
série de normes ISO 8859, la table ISO-8859-1 concerne aussi bien
l'albanais, l'allemand, l'anglais, le catalan, le danois, l'espagnol,
le féroen, le finnois, le galicien, l'irlandais, l'islandais, l'italien,
le néerlandais, le norvégien, le portugais et le suédois.
- ASCII
-
La table US-ASCII ou tout simplement ASCII est en réalité une table
7 bits.
Elle contient 95 caractères imprimables depuis l'espace (numérotée
32) jusqu'au tilde (numéroté 126).
Elle inclut la plupart des signes de ponctuation utilisés dans
les langues latines, les lettres non accentuées (majuscules et
minuscules), les chiffres de 0 à 9, et quelques caractères
supplémentaires (des opérateurs arithmétiques par exemple).
En revanche, on n'y trouve aucune des lettres avec diacritiques
(accents, trémas ou cédilles) indispensables pour écrire
correctement le français.
Noter qu'il a existé des variantes régionales de la table ASCII,
incluant des lettres avec diacritiques à la place de certains
signes de ponctuation moins utilisés dans ASCII. Voir par exemple
ISO-646-FR, où les caractères « é » et « è » sont venus
remplacer « { » et « } » respectivement, au grand dam des
programmeurs C.
Mais toutes les fois où vous entendrez nommer « ASCII » ou
« L'ASCII étendu » (avec article défini) un jeu
de caractères 8 bits, vous pouvez être sûrs que ce terme est
impropre, et désigne probablement CP1252 ou CP850, voire CP437.
- ISO-8859-1
-
Cette norme ISO, également nommée Latin 1, est
un sur-ensemble de la table ASCII.
Parmi les 96 caractères supplémentaires, on trouve la plupart
des lettres avec diacritiques utiles en français, que ce soit
en majuscules ou en minuscules, une exception notable étant le
Y majuscule avec tréma (Ÿ). On y trouve aussi les
ligatures æ et Æ, mais pas œ ni Œ.
Les deux autres apports principaux pour l'écriture du français
sont l'espace insécable et les guillemets français « ».
- ISO-8859-15
-
Cette autre norme ISO, également nommée Latin 9, est
une légère modification de la table ISO-8859-1 comblant certains
de ses manques.
Par exemple, on y trouve un Ÿ et les ligatures œ et
Œ, ainsi que le caractère euro (€).
Du fait que les deux tables contiennent exactement le même
nombre de caractères au total (95 + 96 = 191), certains,
considérés comme moins importants, ont dû être sacrifiés,
tels que les fractions ¼, ½ et ¾.
Pour la petite histoire, c'est d'abord le besoin de comparer
facilement ISO-8859-1 et ISO-8859-15 qui m'a donné l'idée de
réaliser cette page.
- CP1252
-
La table CP1252, définie par Microsoft, est la table par défaut
des PC sous MS-Windows en version francophone.
Cette table est un sur-ensemble de la table ISO-8859-1, ce qui
permet une compatibilité parfaite avec la norme ISO-8859-1
pourvu qu'aucun caractère de codes 128 à 159 ne soit utilisé.
En réalité, je devrais parler des
tables CP1252 plutôt que de la
table CP1252, car plusieurs ajouts successifs
ont été faits dans cette table sans qu'elle ne change de nom.
Par exemple, une ancienne version de CP1252 ne contenait pas
le caractère euro (€) alors que celui-ci existe maintenant
à la position 128.
- CP850
-
La table CP850 est celle utilisée par le système d'exploitation
MS-DOS sur les machines qui ont un MS-Windows en CP1252. Cette
table permet de représenter tous les caractères de ISO-8859-1
(quoique à des positions différentes) tout en conservant une
compatibilité avec la table CP437 (tous les caractères communs
aux deux tables sont aux mêmes positions).
Note : dans les documentations Microsoft, on appelle
ANSI
les tables utilisées à travers l'interface graphique Windows
(CP1252 pour le français) et
OEM
celles utilisées dans une fenêtre DOS
(CP850 pour la langue française).
- CP437
-
La table CP437 enfin, quoique je la présente après, est plus
ancienne que les quatres tables 8 bits décrites ci-dessus
(je mets à part la table ASCII 7 bits qui est à la fois
l'ancètre et le dénominateur commun de toutes les autres).
Elle était déjà présente sur les PC IBM au début des années
1980, soit bien avant la naissance de MS-Windows.
Datant de l'époque où les écrans étaient principalement en
mode texte (25 lignes de 80 colonnes), on y trouve de nombreux
petits symboles ainsi que des caractères permettant de dessiner
des cadres .
Par ailleurs, cette table n'étant pas destinée à communiquer
via Internet, toutes les positions sauf une (le code nul) sont
utilisées.
- MacRoman
-
Alors que les tables CP850 et CP1252 se trouvent de préférence
sur les PC avec MS-Windows, la table MacRoman est le jeu de
caractères par défaut sur les ordinateurs Macintosh et le
système d'exploitation Mac OS (en français).
Noter que, de même que pour CP1252, et contrairement aux normes
ISO, certaines modifications ont été faites sans que le nom
change ;
par exemple, à la position 219, le caractère euro (€)
a remplacé le précédent symbole monétaire (¤)
dans la version 8.5 de Mac OS.
Autre particularité de cette table, elle comporte à la position
240 un caractère dont le point de code Unicode fait partie de
la « zone à usage privé » E000-F8FF. Sur un Macintosh vous
pourrez peut-être voir le logo Apple à cette position, mais moi,
sur Windows, je n'y vois qu'un point d'interrogation avec Mozilla
ou Firefox, un carré vide avec Internet Explorer.
2. Unicode : blocs de caractères et code de couleurs
Alors que chacune des tables présentées dans la section précédente
ne contient qu'une minuscule partie de l'ensemble des caractères
utilisés par l'ensemble des langues parlées sur la planète, Unicode
tend à l'exhaustivité. Ainsi, tous les caractères présents dans un
jeu de caractère normalisé doivent se retrouver dans Unicode.
C'est pour cette raison qu'Unicode sert de référence universelle
pour chaque caractère, que ce soit sous la forme d'un point de
code (code point en anglais) ou sous la forme de son
codage en UTF-8.
Unicode regroupe les codes représentant les caractères dans des
« blocs » de codes consécutifs.
Les deux premiers blocs reprennent l'intégralité de la norme
ISO 8859-1 (Latin1), le premier des deux correspondant
à la norme ASCII.
En dehors de ces deux premiers, chacun des blocs regroupe des
caractères appartenant à un même type d'écriture et partageant
les mêmes fonctionnalités.
Par exemple, on a un bloc pour les lettres grecques, un autre pour
les symboles monétaires, et ainsi de suite.
Les caractères déjà présents dans les deux premiers blocs ne sont
pas dupliqués ailleurs, ainsi les caractères $ (ASCII) et ¥
(Latin-1) ne sont pas rangés avec € parmi les autres symboles
monétaires,
Les sept tables 8 bits ci-dessus regroupent à elles toutes des caractères
appartenant à une bonne vingtaine de blocs Unicode différents.
Afin de s'y retrouver plus facilement, j'ai choisi un code de
couleurs permettant d'avoir tout de suite une idée approximative
de l'emplacement de chaque caractère dans Unicode : deux caractères
de la même couleur ne sont pas forcément dans le même bloc, mais deux
caractères d'un même bloc sont toujours de la même couleur.
Le tableau ci-dessous montre tous les blocs Unicode utilisés, avec
l'intervalle des caractères définis par chaque bloc, la couleur que
j'ai choisie, et un petit commentaire. Il y a aussi à chaque fois
un pointeur vers les documents PDF de référence sur le site du
consortium Unicode, aussi
bien en français qu'en anglais.
Intervalles et couleurs |
Exemples |
Fichiers PDF sur www.unicode.org |
Commentaires |
U+0000 .. U+007F |
|
[fr] Commandes C0 et latin de base
[en] C0 Controls and Basic Latin
|
Ceci constitue la table ASCII 7 bits. Les caractères sont en fait dans l'intervalle U+0020..U+007E tandis que U+0000..U+001F et U+007F sont les commandes C0. |
U+0080 .. U+00FF |
|
[fr] Commandes C1 et supplément Latin-1
[en] C1 Controls and Latin-1 Supplement
|
Ceci constitue la partie haute de ISO-8859-1. Les caractères sont en fait dans l'intervalle U+00A0..U+00FF tandis que U+0080..U+009F sont les commandes C1. |
U+0100 .. U+017F |
|
[fr] Latin étendu A
[en] Latin Extended-A
|
On y trouve quelques caractères oubliés dans ISO-8859-1 tels que les ligatures Œ et œ et le Ÿ(tous trois présents dans ISO-8859-15). Les tables CP850 et MacRoman comprennent aussi le ı qui est un i sans point. |
U+0180 .. U+024F |
|
[fr] Latin étendu B
[en] Latin Extended-B
|
Le caractère ƒ est le seul représentant de ce bloc dans les tables choisies : il est dans CP437, CP850, CP1252 et MacRoman. |
U+02B0 .. U+02FF |
|
[fr] Lettres modificatives avec chasse
[en] Spacing Modifier Letters
|
On trouve deux de ces caractères dans CP1252, les deux mêmes plus six autres dans MacRoman. |
U+0370 .. U+03FF |
|
[fr] Grec et copte
[en] Greek and Coptic
|
Caractères présents dans CP437 et MacRoman. |
U+2000 .. U+206F |
|
[fr] Ponctuation générale
[en] General Punctuation
|
On y trouve en particulier la vraie apostrophe typographique (’) et les tirets (– et —) qui sont si mal rendus en ASCII par l'apostrophe droite (') et les traits d'union (--). |
U+2070 .. U+209F |
|
[fr] Exposants et indices
[en] Superscripts and Subscripts
|
Un seul représentant dans une seule table : ⁿ dans CP437. |
U+20A0 .. U+20CF |
|
[fr] Symboles monétaires
[en] Currency Symbols
|
On trouve ₧ dans CP437, € dans ISO-8859-15 mais aussi dans les versions récentes de CP1252 et MacRoman. |
U+2100 .. U+214F |
|
[fr] Symboles de type lettre
[en] Letterlike Symbols
|
Un seul représentant : ™ dans CP1252 et MacRoman. |
U+2190 .. U+21FF |
|
[fr] Flèches
[en] Arrows
|
On trouve sept de ces caractères dans une seule table : CP437. |
U+2200 .. U+22FF |
|
[fr] Opérateurs mathématiques
[en] Mathematical Operators
|
Caractères présents dans CP437 et MacRoman. |
U+2300 .. U+23FF |
|
[fr] Signes techniques divers
[en] Miscellaneous Technical
|
On trouve quatre de ces caractères dans une seule table : CP437. |
U+2500 .. U+257F |
|
[fr] Filets
[en] Box Drawing
|
Toutes les combinaisons de filets fins ou doubles sont dans CP437, seules celles qui ne mixent pas les deux types sont aussi dans CP850. |
U+2580 .. U+259F |
|
[fr] Pavés
[en] Block Elements
|
On trouve huit de ces caractères dans CP437, deux de moins dans CP850. |
U+25A0 .. U+25FF |
|
[fr] Formes géométriques
[en] Geometric Shapes
|
Le losange ◊ est dans MacRoman, le carré noir ■ dans CP850, et neuf caractères dont le carré noir (mais pas le losange) dans CP437. |
U+2600 .. U+26FF |
|
[fr] Symboles divers
[en] Miscellaneous Symbols
|
On trouve onze de ces caractères dans CP437, tous dans la première rangée de cette table. |
U+E000 .. U+F8FF |
|
[fr] Zone à usage privé
[en] Private Use Area
|
Comme son nom l'indique, cette zone ne contient aucun caractère défini publiquement par le consortium Unicode. Chaque vendeur de matériel ou de logiciel peut la définir à sa guise. Par exemple, à la position U+F8FF, les polices de caractère sur Macintosh affichent le logo Apple. |
U+FB00 .. U+FB4F |
|
[fr] Formes de présentation alphabétiques
[en] Alphabetic Presentation Forms
|
On trouve les ligatures fi et fl dans MacRoman. |
3. Informations sur les caractères
Plusieurs caractéristiques sont attachées à chaque caractère.
L'une d'entre elles est sa position dans la table 8 bits choisie,
mais les autres ne dépendent que de sa position dans Unicode.
Pour les décrire, je prendrai pour exemple le caractère €
que l'on trouve à la position A4 (164 en décimal) dans ISO-8859-15.
Si votre navigateur est configuré pour afficher des « info-bulles »,
en survolant ce caractère avec la souris vous devriez voir
quelque chose qui ressemble à ça :
(164) U+20AC € €
[E2 82 AC]
- Position dans la table 8 bits
-
C'est un nombre compris entre 0 et 255 en décimal (entre 00 et FF
en hexadécimal), qui tient donc dans un octet, et qui représente
de façon unique un caractère au sein d'une table 8 bits donnée.
Ainsi, le caractère € est à la position A4 (hexa) dans
ISO-8859-15.
Comme A4 = A0 + 04, on le trouve
à l'intersection de la ligne A0 et de la colonne 04
(ou de la colonne A0 et de la ligne 04 si vous avez
choisi une orientation verticale pour les rangées de caractères).
Pour avoir la position en décimal, à moins d'être un crack en
conversions de bases et de savoir tout calculer de tête
(ainsi A4 = 10×16+4 = 164), on peut trouver l'information
au tout début de l'info-bulle, entre parenthèses :
(164).
Si JavaScript est activé, on peut aussi lire la valeur dans l'un
des tableaux de droite.
- Position dans Unicode
-
Chaque caractère Unicode est repéré par un point de code
de la forme U+nnnn, où nnnn est en hexadécimal.
Les caractères qui nous intéressent font tous partie du premier
plan de base multilingue et sont représentés par un point de code
à quatre chiffres hexa, entre U+0000 et U+FFFD (entre 0 et 65533
en décimal).
D'autres valeurs sont possibles, de U+10000 à U+10FFFF, mais pas
pour les caractères que l'on rencontre habituellement.
Concernant notre exemple du caractère €, le point de code est
U+20AC
(deuxième valeur dans l'info-bulle).
Noter que le nombre hexadécimal 20AC vaut 8364 en décimal,
ce qui servira pour les références de caractères numériques en HTML.
- Références de caractères numériques
-
Les références de caractères en HTML permettent d'inclure dans
une page web n'importe quel caractère, quel que soit le jeu de
caractères déclaré pour la page.
Ainsi, cette page que vous lisez est en ISO-8859-1, et pourtant
elle contient des dizaines de caractères qui n'en font pas partie.
Les références de caractères les plus universelles sont celles
utilisant un numéro Unicode, soit en hexadécimal
(précédé de « &#x » et suivi de « ; »),
soit en décimal
(précédé de « &# » et suivi de « ; »).
Le numéro hexadécimal est le plus facile à trouver dans une table
Unicode puisqu'il suffit de garder les quatre chiffres hexa en
supprimant le « U+ ».
Cela dit, l'habitude a été prise par les auteurs de sites d'utiliser
plutôt la forme avec numéro décimal, car les plus anciens navigateurs
ne comprenaient que celle-ci.
Reprenons notre exemple du caractère €. La référence numérique
hexadécimale, calquée sur U+20AC,
est « € ».
Quant à la référence numérique décimale, on la trouve directement
dans l'info-bulle : €,
- Références de caractères symboliques (entités)
-
Il existe un autre type de références de caractères sous la forme
de noms (précédés par « & » et suivis par « ; ») qui sont plus
faciles à mémoriser que les références numériques.
On les appelle
Character
entity references en anglais,
références
des entités de caractères en français.
Elles présentent pourtant deux inconvénients majeurs, l'un étant
que seuls quelques caractères ont une référence symbolique,
l'autre étant que la liste de caractères reconnue pour HTML4
ne le sera plus en XHTML.
Lorsque une entité existe pour un caractère, son nom est
donné en quatrième et avant-dernière position dans l'info-bulle.
Ainsi, pour le caractère €, c'est
€.
- Codage UTF-8
-
Le codage UTF-8 d'un caractère donné ne dépend que de sa position
dans Unicode (son point de code U+nnnn).
Il est donné à la dernière position de l'info-bulle,
entre crochets.
Pour le caractère €, c'est
[E2 82 AC].
4. Comparaisons entre plusieurs tables
J'en viens à la principale raison d'être de cette page rassemblant
plusieurs tables de caractères : les comparer.
En effet, elle permet de répondre à des questions existentielles
telles que « pourquoi mon é devient un
Ú quand je lance mon application Windows sous
une fenêtre DOS ? »
(réponse : parce que le é est à la position 233
dans CP1252, jeu de caractères pour Windows, et que le
Ú est à la même position 233 dans
CP850, jeu de caractères pour MS-DOS)
ou bien « quel caractère dois-je saisir dans mon éditeur CP1252
pour qu'il soit lu comme un €, sachant que le jeu
indiqué au destinataire est ISO-8859-15 ? »
(réponse : c'est le caractère ¤, qui se trouve à
la position 164 dans CP1252, position de €
dans ISO-8859-15).
- À la même position dans toutes les tables
-
Ce tableau rassemble l'ensemble des caractères se trouvant à la
même position dans chacune des tables 8 bits.
Par exemple, à la position 164 qui correspond au caractère €
dans la table ISO-8859-15, on trouve le caractère ¤ dans les tables
ISO-8859-1 et CP1252, le caractère ñ dans les tables CP850 et CP437,
le caractère § dans la table MacRoman, et rien du tout dans la table
ASCII.
Pour chacun de ces caractères on trouvera rassemblés dans le même
tableau le point de code Unicode,
les références de caractères pour HTML (référence numérique,
et entité si elle existe), et le codage UTF-8.
- Le même glyphe dans toutes les tables
-
Lorsqu'un caractère donné se retrouve dans plusieurs tables 8 bits,
ce tableau indique sa position dans chacune.
Par exemple, le caractère € se trouve à la position 164 (A4 hexa)
dans ISO-8859-15, à la position 128 (80 hexa) dans CP1252, à la position
219 (DB hexa) dans MacRoman – du moins depuis MacOS 8.5 –,
et nulle part ailleurs.
5. Utilisation pratique
J'ai essayé de concevoir cette page de façon à ce que son utilisation
soit aussi intuitive que possible.
Néanmoins voici quelques indications sur les différentes possibilités
qui sont offertes.
Changer les valeurs par défaut
Certains choix par défaut de la page sont modifiables grâce
à un formulaire.
En particulier on peut changer l'orientation des rangées,
soit horizontale, soit verticale.
Une orientation horizontale correspond à la lecture habituelle de
gauche à droite puis de haut en bas, mais on voit assez souvent
des tables de caractères présentées verticalement et il est
possible que cette orientation vous semble plus naturelle.
En tout cas, ceci est juste un choix esthétique qui n'a
strictement aucune incidence sur les informations présentées.
Comme autre choix possible, il y a celui de la table formant
le 6e onglet.
Initialement j'avais choisi la table CP437 car c'est celle
que moi, dinosaure de l'informatique, je connaissais et j'utilisais
dès la fin des années 1980.
Mais cette table n'est plus jamais utilisée, tandis que les
possesseurs de Mac seront heureux de trouver la table
MacRoman.
Du coup, en février 2007 j'ai remplacé la table CP437 par la
table MacRoman, mais en laissant la possibilité à ceux qui le
souhaitent (des nostalgiques, sûrement) de revenir à CP437.
Enfin, on peut choisir un onglet de référence (c'est-à-dire
une table) et une position de référence (c'est-à-dire un
caractère dans cette table), ce qui remplit déjà les tableaux
de droite donnant des informations sur ce caractère et sur ceux
qui lui sont apparentés dans les autres tables.
Le choix de la table de référence se fait par un menu, mais
pour la position de référence il faut saisir sa valeur directement
en décimal : c'est un entier compris entre 0 et 255.
Important :
n'oubliez pas de cliquer sur le bouton « Appliquer »
pour valider vos choix.
Naviguer à la souris
Vous pouvez passer d'une table à une autre en survolant les
différents onglets à la souris, puis passer de la même manière
d'un caractère à un autre.
Vous pourrez ainsi afficher des informations sur chaque caractère,
soit via les « info-bulles » si votre navigateur est
configuré pour les afficher,
soit dans les tableaux de droite si JavaScript est actif.
En cessant de survoler un caractère ou une table, ce sont la
table et le caractère de référence qui reviennent automatiquement.
Mais si JavaScript est actif vous pouvez changer de table de
référence et de caractère de référence, tout simplement en
cliquant dessus.
6. Historique de cette page
- Juillet 2005
-
Le jeudi 21 juillet 2005, désireux de faire un comparatif
pratique entre plusieurs tables de caractères, je commence
à faire quelques tests en local pour arriver à les mettre
les unes sur les autres, ceci en jouant en CSS avec
la pseudo-classe « :hover » et la propriété « z-index ».
Le dimanche 24 juillet je mets en ligne un premier prototype
fonctionnel mais très peu ergonomique, et je lance une
discussion sur le forum usenet fr.comp.infosystemes.www.auteurs
afin de l'améliorer.
Recevant de nombreuses réponses de plus d'une dizaine
de contributeurs réguliers de ce groupe, dont plusieurs
utilisant d'autres navigateurs que les miens
et d'autres systèmes d'exploitation que le mien,
j'arrive grâce à eux à un résultat beaucoup plus
satisfaisant, le vendredi 29 juillet.
- Février et mars 2007
-
Le samedi 24 février 2007, j'ajoute la possibilité d'afficher
la table MacRoman en lieu et place de la table CP437.
Gérer MacRoman était une chose que l'on m'avait demandée
très longtemps auparavant, mais que je n'avais jamais
réalisée car je n'avais pas envie d'augmenter le nombre
d'onglets, et que je n'avais pas pensé à un paramètre
d'appel pour choisir entre MacRoman et CP437.
Quelques jours plus tard, le jeudi 1er mars,
j'explique enfin le code des couleurs que j'avais utilisé
dès le début pour regrouper les caractères apparentés.
- Avril 2007
-
Le dimanche 15 avril je termine deux semaines de modifications.
Les plus visibles sont le formulaire permettant de choisir
soi-même les valeurs par défaut, les tableaux de droite que j'ai
réduits pour les rendre plus lisibles, et la doc que j'ai mise à
jour.
Mais j'ai aussi et surtout changé le code JavaScript.
Avec l'ancien code, le temps de lancement était d'environ
700 ou 800 ms dans Mozilla et Firefox, mais de plusieurs secondes
dans Internet Explorer, ce temps augmentant à chaque appel.
Avec le code actuel, le temps est le même dans Internet Explorer
que dans Mozilla et Firefox.
- Décembre 2007
-
Je viens d'ajouter deux lignes de JavaScript pour mettre à
jour automatiquement, juste en cliquant sur un caractère ou
un onglet, l'onglet de référence et la position de
référence dans le formulaire permettant de changer les
valeurs par défaut.