Jeux de caractères : Morse, ASCII, ISO/CEI 646?

À bien des égards, les jeux de caractères trônent bien près du sommet de la pyramide de l’horreur. Tout le monde a vu, un jour ou l’autre, un caractère ind�sirable dans un courriel ou sur une page web à cause d’un problème d’encodage de caractères.

Bien que ces problèmes aient été autrement plus pénible à une certaine époque, je ne peux m’empêcher de ressentir, en tant que mortel, un serrement à l’estomac à chaque fois que j’en entends parler. À force de voir des Latin1, ISO-8859-1, CP-1252, ANSI, ISO/CEI 8859-15, US-ASCII, UTF-8 et UTF-16BE, le temps est venu de mettre un peu d’ordre dans ce ß°®}$%?#&*~{!

Qu’est-ce que l’encodage de caractères? Qu’est-ce qu’on a fait pour mériter ça?

Pour un signal électrique, un disque magnétique ou une onde électromagnétique, un caractère ne signifie rien. Afin de transmettre un caractère ou de le stocker sur un support numérique, il faut le convertir en quelque chose de plus simple. Par exemple, le code morse : chaque caractère est converti en une séquence d’impulsions courtes ou longues. Ainsi, avec un seul son, tantôt court, tantôt long, on pourrait communiquer un roman en entier, puis à la fin du processus, halluciner des bips des jours durant.

Jeux de caractères Caractères
En décimal (et hexadécimal)
a é
ASCII 97 (61) Inexistant
MacRoman 97 (61) 142 (8E)
ISO 8859-1 97 (61) 233 (E9)
UTF-8 97 (61) 195 169 (C3A9)
deux octets

En informatique, il n’y a pas de bips mais des bits. Le bit a deux valeurs possibles : 1 ou 0. Par conséquent, il faut une façon d’encoder les caractères en 1 et en 0, ou autrement dit, de les encoder en binaire.

Entrent en scène les jeux de caractères : chacun d’entre eux représente une façon d’encoder les caractères en binaire. C’est tout simplement une table de correspondance entre chaque caractère et sa valeur binaire. Par exemple, en ASCII, le caractère ‘a’ correspond à 01100001.

Pour des raisons évidentes de concision, nous utiliserons les nombres décimaux plutôt que les nombres binaires ou hexadécimaux – oui, je sais, c’est la pénible ascension de l’Affreux. En décimal, 01100001 est égal à 97.

Comme on peut le voir dans le tableau ci-dessus, le caractère ‘a’ correspond à 97 dans la plupart des jeux de caractères. Par contre, le caractère ‘é’ change dans chaque jeu de caractères…

Qu’est-ce qu’un problème d’encodage? C’est pourtant juste des foutus caractères, non?

Quand un logiciel manipule un fichier texte, il doit savoir dans quel jeu de caractères l’interpréter.

Prenons un logiciel A utilisant l’ISO 8859-1 et un logiciel B utilisant l’UTF-8 :

  • Le logiciel A écrit le caractère ‘é’ (en ISO 8859-1) dans un fichier et le sauvegarde.
  • Donc, le fichier contient le nombre 233.
  • Le logiciel B ouvre le fichier et interprète le nombre 233 (en UTF-8).
  • Puisque le nombre 233 ne représente pas un caractère en UTF-8, il affiche ‘�’.

Notons que le problème ne se poserait pas si le caractère était ‘a’, car l’ISO 8859-1 et l’UTF-8 encodent le caractère ‘a’ de la même manière, soit le nombre 97. C’est parce qu’ils sont compatibles au jeu de caractères ASCII.

Et je vous jure que l’ASCII, c’est certainement le truc le plus intéressant après le 120 volts…

ASCII (sur 7 bits)

L’ASCII a été développé aux États-Unis au début des années 60 pour les téléscripteurs. Les 7 bits de l’ASCII permettent seulement d’encoder 128 caractères (de 0 à 127).

Les 95 caractères ASCII affichables.

Les 95 caractères ASCII affichables.

L’ASCII contient 95 caractères affichables (sur la plage 32 à 126) et 33 caractères de contrôle (de 0 à 31 et le 127). Parmi ces derniers, on compte l’espace (SP), le saut de ligne (LF), le retour de chariot (CR), la touche « Escape » (ESC), etc.

N’oublions pas que l’ASCII a été conçu pour les télécommunications préhistoriques, donc on trouve des caractères tels que la fin de transmission (EOT), l’accusé de réception (ACK) et l’annulation (CAN) – en effet, il fut une époque déroutante où les protocoles de communication et les jeux de caractères ne faisaient qu’un!

Par contre, l’ASCII reste un standard américain. Entre autres, il ne contient aucun caractère accentué… Ainsi, pour éviter la prolifération chaotique des jeux de caractères en fonction des besoins de chaque langue et pour assurer une certaine compatibilité, l’ISO a créé l’ISO/CEI 646 – qui personnellement, me laisse encore aujourd’hui un goût particulièrement amer dans la bouche…

ISO/CEI 646 (sur 7 bits)

Le principal problème de l’ISO/CEI 646 reste qu’il utilise, tout comme l’ASCII, seulement 7 bits. Il est donc limité à 128 caractères. Bien que ce soit plus de caractères qu’il n’en faut pour écrire des SMS (lol), ces 7 bits sont nettement insuffisants pour représenter tous les caractères. Alors, l’ISO/CEI 646 a défini un jeu de caractères presqu’en tout point équivalent à l’ASCII sauf que la norme permet de remplacer certains caractères pour créer des variantes nationales.

Voici les 12 caractères variants de l’ISO/CEI 646 par rapport à l’ASCII : # $ @ [ \ ] ^ ` { | } ~

Avec cette avancée – quelque peu douteuse -, l’ASCII est devenu la variante américaine de l’ISO/CEI 646 (ISO-646-US ou US-ASCII) puis d’autres variantes sont apparues. Entre autres, soulignons qu’il existait une variante canadienne dans laquelle des caractères tels que @, [, et ] étaient remplacés par à, â et ê pour que l’on puisse écrire en français et enfin assouvir nos pulsions obesessionnelles et compulsives.

Enfin, avec l’avènement des jeux de caractères sur 8 bits, l’ISO/CEI 646 est tout simplement tombé en désuétude, pour céder la place à une nouvelle génération d’absurdités…

Suite : Encore des jeux de caractères : ISO 8859-1, MacRoman, CP1252?

Publicité

Une réflexion au sujet de « Jeux de caractères : Morse, ASCII, ISO/CEI 646? »

  1. Ping : Encore des jeux de caractères : ISO 8859-1, MacRoman, CP1252? « Sylvain Halde

Votre commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l’aide de votre compte WordPress.com. Déconnexion /  Changer )

Photo Facebook

Vous commentez à l’aide de votre compte Facebook. Déconnexion /  Changer )

Connexion à %s