Informatique


Le codage des caractères

Aller à


Wabief?

Les ordinateurs peuvent traiter autre chose que des nombres à commencer par manipuler des textes!
Mais comme on le sait l'ordinateur ne manipule que des informations binaires, celles-ci représentant du texte.

L'informatique s'est développée surtout aux États-Unis après la deuxième guerre mondiale, et la première langue qu'il fallait coder était l'anglais. Or, l'anglais s'écrit avec l'alphabet latin : il utilise donc 26 lettres (majuscules et minuscules), 10 chiffres, et quelques dizaines de signes de ponctuation. Au total, écrire l'anglais nécessite donc une centaine de caractères.

Les ordinateurs étant construits à partir de paquets de 8 bits (les bytes), et chaque byte étant capable de représenter 256 choses différentes, le choix était vite fait : on pouvait coder le texte sur le principe 1 caractère = 1 byte. Les valeurs des bytes qui ne correspondaient à aucun signe d'écriture pouvaient être utilisées pour représenter divers petits signes graphiques (des flèches, des mini-smileys, et des symboles variés).

Le problème, c'est que s'il existe une logique simple qui permet de coder les nombres en binaire, cette logique fait défaut en ce qui concerne les textes : la correspondance entre telle valeur de byte et tel signe alphanumérique est parfaitement arbitraire.
Du coup, dans les débuts de l'informatique, chaque concepteur d'ordinateur ou de logiciel avait créé sa propre table de correspondance. Mais du coup, les échanges de textes entre logiciels, ou entre machines, tournaient au casse-tête : le T majuscule de l'un devenait une parenthèse ouvrante chez l'autre !

C'est pourquoi dès le début des années 1960, on édicta un standard, une table de correspondance à laquelle tous devaient se plier ; cette table de correspondance, qui utilisait uniquement les 128 premières valeurs du byte (celles dont le premier bit est un zéro) est connue sous le nom de code ASCII (pour American Standard Code for Information Interchange). Dès lors, le A majuscule, par exemple, était codé par la valeur d'octet 01000001 (65, en notation décimale) quelle que soit la machine et le logiciel utilisés, et les textes pouvaient être transmis d'une machine à l'autre sans se changer en un charabia incompréhensible.

Le browser utilise une table de caractères de référence pour interpréter les caractères du fichier qui s'ouvre.
Dès lors, si cette table ne correspond pas à la table de caractères qui a été utilisée pour écrire le fichier les nombres binaires représentants les caractères ne correspondront pas parfaitement et l'affichage dans le browser sera altéré.

Le code suivant a été encodé avec la table de caractères ANSI (ou Windows-1252), qui est utilisé par le Blo-Notes de Windows.

Exemple d'une page web codée en ANSI
Démo
	<!doctype html>
	<html lang="fr">
	<head>
	</head>
	<body>
		çà va très bien
	</body>
	</html>

Coder des caractères

Le codage des caractères est une convention qui permet, à travers un codage connu de tous, de transmettre de l’information textuelle. Cela consiste à représenter chaque caractère, par un motif visuel ou sonore.
Les techniques des ordinateurs reposent sur l’association d’un caractère à un nombre.

Il existe donc des tables qui permettent de lié un caractère avec une représentation numérique binaire, comme par exemples: ASCII, UNICODE,


Le code ASCII

Le code ASCII (American Standard Code for Information Interchange), codé sur 7 bits, définit un jeu de 128 caractères numérotés de 0 à 127. Sept bits suffisent donc à les coder.
Cependant, comme la plupart des ordinateurs travaillent sur des données représentées sur un nombre de bits multiple de huit, les caractères ASCII sont codés sur un byte, le bit de poids fort étant 0.

Le jeu de caractères ASCII comprend:
  • les 26 lettres de l’alphabet latin en versions majuscules et minuscules,
  • les 10 chiffres
  • les symboles de ponctuation y compris l’espace
  • les couples de parenthèses, crochets et accolades
  • et quelques autres symboles divers

Mais un gros souci apparaît! Les caractères nécessaires au anglo-saxons sont tous couverts, par contre, les caractères accentués des langues européennes ne peuvent être représentés car il n'y a pas assez de représentations possibles!


Les extensions ISO-8859

Les codes ISO-8859 sont au nombre de 16 et désignés par ISO 8859-n où n est un entier compris entre 1 et 16.
Tous ces codes définissent chacun un jeu de 224 caractères codés de 0 à 127 et de 160 à 255 (les codes de 128 à 159 sont inutilisés).
Tous ces caractères peuvent et sont représentés sur 8 bits.

Les caractères de codes compris entre 0 et 127 sont ceux du code ASCII. Les codes ISO 8859 se distinguent par le jeu des caractères de 160 à 255.
Pour avoir les caractères accentués du français il faut utiliser l’ISO 8859-1 (parfois appelé LATIN-1) ou l’ISO 8859-15 (parfois appelé LATIN-15) qui ne se distingue du précédent que par le remplacement de quelques caractères dont le ¤ par €. Avec ISO 8859-1 (ou ISO 8859-15), le é est codé 233.


UNICODE

Les diverses extensions du code ASCII, dont les ISO 8859, présentent l’inconvénient d’être incompatibles entre elles, et le plus souvent d’être spécialisées pour un jeu de caractères lié à une langue.
Comment alors coder dans un même document des textes rédigés avec des alphabets aussi divers que les alphabets latin, cyrillique, grec, arabe, ... ?

En 1990 on a développé un système d'encodage universel, Unicode, qui regroupe tous les caractères de toutes les langues de la planète.
Unicode en est actuellement à sa 12ième version (mars 2019) et recense plus 135000 caractères, attribue à chacun d’eux un nom et un numéro exprimé sous la forme U+XXXX où XXXX représentent 4 chiffres hexadécimaux.

Les caractères de numéros compris entre 0 et 127 sont ceux du code ASCII. Ceux de code compris entre 160 et 255 sont ceux du code ISO 8859-1.


Des anglo-saxons pas contents

Les anglo-saxons on toujours pris l'habitude de coder les caractères en ASCII, table de codage n'exigeant que 8 bits (et même 7 pour l'ASCII de base), ils n'ont pas été très content de devoir tenir compte des autres langues parlées dans le monde et d'être donc obligés d'utiliser des tables de codages nécessitant plusieurs bytes par caractères!
... ce qui multipliait le poids des fichiers de 2, 3, 4 et parfois plus!

On a donc imaginé UNICODE et à partir de celui-ci un système de codage dynamique, pouvant compter de 1 à 4 bytes: utf-8 était né.

Les caractères ASCII étant tous regroupés dans le premier byte nos amis anglo-saxons se sont un peu calmés.


Les différents encodages des caractères Unicode

Unicode se contente de recenser, nommer les caractères et leur attribuer un numéro. Mais il ne dit pas comment ils doivent être codés en informatique.

Plusieurs codages des caractères Unicode existent :
  • UTF-32 qui code chaque caractère sur 32 bits (soit quatre bytes)
  • UTF-16 qui code chaque caractère sur 16 ou 32 bits (soit deux ou quatre bytes)
  • UTF-8 qui code chaque caractère sur 8, 16, 24 ou 32 bits (soit un, deux, trois ou quatre bytes)
Le plus couramment utilisé, notamment pour les pages Web, est UTF-8.