Aller au contenu

Codage des caractères et des chaînes

Travail en cours

Ce chapitre est en cours d'écriture. Il est donc déconseillé de le lire pour le moment.

On n'a vu que les ordinateurs, dans leur fonctionnement, ne manipulent que des nombres, ou plus précisément des paquets de bits.

Pourtant, tout un tas de logiciels, et le code que nous avons écrit, sont capables de manipuler du texte. Mais alors comment faire ?

Idée du codage des caractère

Un texte est simplement une séquence de caractères. Il nous faut comprendre comment représenter chaque caractère avec un codage en bits. Pour que ce soit plus simple à manipuler, on fait correspondre chaque caractère avec un nombre entier positif, dans une table de conversion.

Par exemple :

Caractère Nombre
a 1
b 2
... ...
z 26
A 27
B 28
... ...
Z 52
. 53
, 54
... ...

Ensuite, on peut simplement représenter un texte par une liste de nombres :

abAB.

devient

1,2,27,28,54

Exercice

En utilisant la table ci-dessus, décodez le texte suivant :

32,5,12,9,24
Felix

ASCII

L'ascii est un codage qui compte 128 symbole, un symbole étant codé sur 7 bits. Il fait partie des codages les plus anciens.

Les caractères prennent très peu de place, mais le nombre de symboles est très limité.

La table de correspondance des caractères ASCII peut se trouver sur Wikipédia.

Exercice

Quel est le codage de la chaîne PRENOM en ASCII ?

Servez vous des tables sur la page Wikipédia.

Attention, les lettres sont en majuscules !

80,82,69,78,79,77

blague : l'émoji ski n'est pas ascii

ISO-8859-1

L'ISO-8859-1, parfois appelé informellement LATIN-1, est un standard qui a longtemps été utilisé dans les pays européens. Il est codé sur 8 bits, et autorise donc 256 caractères différents. Il fait partie d'une norme plus large, la norme ISO-8859, qui décrit aussi d'autres jeux de caractères.

On peut trouver sa table de conversion sur https://fr.wikipedia.org/wiki/ISO/CEI_8859-1

Il a l'avantage d'être relativement léger, et de comporter des caractères accentués.

Exercice

Quel est le codage de la chaîne PRÉNOM en ISO-8859-1 ?

Servez vous des tables sur la page Wikipédia.

Attention, les lettres sont en majuscules !

Le codage sera proche du précédent parce que seul les caractères accentués sont différents.

80,82,201,78,79,77

Unicode

Les représentations Unicode, dont UTF-8 est un des standard les plus classiques, est codé sur un nombre variable de bit : de 1 à 4 octets.

Si le premier octet commence par 0, alors le codage est sur un octet, et est identique à ASCII sur les bits restants.

0xxxxxxx

Si le premier octet commence par 110, alors le codage est sur deux octets, et le second octet commence par 10.

110xxxxx 10xxxxxx

Si le premier octet commence par 1110, alors le codage est sur trois octets, et les deux octets restants commencent par 10.

1110xxxxx 10xxxxxx 10xxxxxx

Si le premier octet commence par 11110, alors le codage est sur quatre octets, et les trois octets restants commencent par 10.

11110xxx 10xxxxxx 10xxxxxx 10xxxxxx

L'UTF-8 est extrêmement utilisé :

  • Pour les caractères ASCII, les plus utilisés, l'UTF-8 utilise uniquement un octet par caractère
  • On peut coder des millions de caractères, comme des notes de musiques, des smileys, ...

Toutefois, l'UTF-8 est plus difficile à analyser que les deux standards plus haut, parce que la taille des caractères est variable : il faut donc lire le premier octet pour savoir combien d'octets sont utilisés au total.

Et Python ?

Python utilise une représentation UTF-8 des caractères. On peut donc directement les obtenir.

ord(car)

Retourne le code du caractère car.

chr(code)

Retourne le caractère correspondant au code code.

Attention, il y a certains éditeurs de texte et certains terminaux qui ne supportent pas UTF-8, les octets seront considérés comme des caractères séparés, et l'affichage sera donc erronné.

On peut afficher des caractères spéciaux avec ces fonctions :

print(chr(8364))

Affiche un euro :

Idée plus générale de codage (ouverture) de toute donnée

D'une manière générale, on peut coder n'importe quelle donnée, et pas seulement du texte, avec des méthodes similaires.

Par exemple, les instructions qui composent le code d'un programme.

C'est ce que nous verrons dans la partie suivante du cours : l'architecture Von Neumann.