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 :
devient
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
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
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.
Si le premier octet commence par 110, alors le codage est sur deux octets, et le second octet commence par 10.
Si le premier octet commence par 1110, alors le codage est sur trois octets, et les deux octets restants commencent par 10.
Si le premier octet commence par 11110, alors le codage est sur quatre octets, et les trois octets restants commencent par 10.
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.
Retourne le code du caractère car
.
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 :
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.