Codage des caractères

le code ASCII

Les bases du système de codage des caractères ont été inventées dans les années 60 avec le code ASCII (American Standard Code for Information Interchange).

Le principe est d'attribuer un nombre à chaque symbole ou lettre, ainsi la lettre A correspond au nombre 65, la lettre B au nombre 66, ..., la lettre Z au nombre 90. Il faut donc utiliser le nombre 97 pour représenter un 'a' minuscule. Pour représenter un '?', il faut utiliser le code 63.
Certains codes (ceux inférieurs à 32) sont des codes de contrôle (il ne sont pas faits pour être affichés). Par exemple le code 10 permet d'aller à la ligne, le code 7 fait biper l'ordinateur, etc.

Cependant le code ASCII est codé sur 7 bits ce qui le limite à 128 caractères. Cela est insuffisant pour coder tous les symboles existants dans les différentes langues. En particulier le code ASCII ne comporte pas de caractères accentués. Les américains nous ont oublié. Nous et d'autres pays : l'Espagne (avec le point d'interrogation retourné par exemple), l'Allemagne, etc. Sans parler des pays comme la chine ou le japon avec leurs différents alphabet...

Il nous arrive souvent d'utiliser les codes de 128 à 255 pour les accents, mais ces codes sont différents d'un pays à l'autre ! Pas pratique pour échanger des documents.

Il faut donc trouver un code plus pratique. Il existe: c'est l'UNICODE.


L'Unicode

Au lieu d'utiliser seulement les codes 0 à 127, il utilise des codes de valeur bien plus grandes.

Le code UNICODE permet de représenter tous les caractères spécifiques aux différentes langues. De nouveaux codes sont régulièrement attribués pour de nouveaux caractères: caractères latins (accentués ou non), grecs, cyrillics, arméniens, hébreux, thaï, hiragana, katakana... L'alphabet Chinois Kanji comporte à lui seul 6879 caractères.

L'Unicode définie donc un correspondance entre symboles et nombres.

(Le symbole "Ő" sera représent par le nombre 213).
Voici un lien pour voir les tables UNICODE (voir la tables des caractères).

Vous pourrez trouver plus d'informations sur l'UNICODE sur http://www.unicode.org.

Même si l'UNICODE est bien conçu, il reste assez peu utilisé par rapport à l'ASCII. (Ne vous amusez pas à envoyer un message en UNICODE à quelqu'un : il ne saurait probablement pas comment le lire !). Pour les programmeurs, ça n'est pas toujours très facile à manipuler non plus.

Ce standard se développe de plus en plus. Les langages Java, .Net (C#) et Python supportent déjà nativement l'UNICODE. La plupart des systèmes d'exploitation (Windows, Linux, MacOS X...) supportent déjà l'Unicode.

 

Unicode dans la pratique: UTF-8

Bon. Unicode, dans la théorie, c'est très bien.

Mais dans la pratique, c'est une autre paire de manches:
Généralement en Unicode, un caractères prend 2 octets. Autrement dit, le moindre texte prend deux fois plus de place qu'en ASCII. C'est du gaspillage.

De plus, si on prend un texte en français, la grande majorité des caractères utilisent seulement le code ASCII. Seuls quelques rares caractères nécessitent l'Unicode.

On a donc trouvé une astuce: l'UTF-8.

Un texte en UTF-8 est simple: il est partout en ASCII, et dès qu'on a besoin d'un caractère appartenant à l'Unicode, on utilise un caractère spécial signalant "attention, le caractère suivant est en Unicode".

Par exemple, pour le texte "Bienvenue chez Sébastien !", seul le "é" ne fait pas partie du code ASCII. On écrit donc en UTF-8:

im1

Pour être rigoureux, on indique quand même au début du fichier que c'est un fichier en UTF-8 à l'aide de caractères spéciaux:

im2

Et voilà !

L'UTF-8 rassemble le meilleur de deux mondes: l'efficacité de l'ASCII et l'étendue de l'Unicode. D'ailleurs l'UTF-8 a été adopté comme norme pour l'encodage des fichiers XML. La plupart des navigateurs récents supportent également l'UTF-8 et le détectent automatiquement dans les pages HTML.


Codage dans les pages web

Si vous mettez directement le caractère "é" dans une page web, ce n'est pas bien. ll faut obligatoirement choisir une des 3 solutions suivantes:

L'ISO-8859-1 convient pour la plupart des langues latines ou occidentales (anglais, français, allemand, espagnol...), et l'UTF-8 vous sera indispensable pour les autres langues (japonais, hébreu, etc.).

A vous de choisir en fonction de vos besoins.

Retrouver le code d'un caractère

Les principales extensions du code ASCII qui permettent de contourner ce problème sont l'ISO-8859-15 ou l'UTF-8.

Il est parfois utile dans un programme de pouvoir obtenir la correspondance entre le caractère et son code.

Du caractère au code

En Python :

ord('A')

En JavaScript :

var monCode="A".charCodeAt(0);

Du code au caractère

En Python :

chr (65)

En JavaScript :

var monCaractere=String.fromCharCode(65);

A voir aussi : Les chaînes de caractères en JavaScript