Représentation d'un texte en machine
Attendus
| Contenus | Capacités attendues |
|---|---|
| Représentation d’un texte en machine. Exemples des encodages ASCII, ISO-8859-1, Unicode |
Identifier l’intérêt des différents systèmes d’encodage. Convertir un fichier texte dans différents formats d’encodage. |
Contexte
Source : http://www.retourdemartine.free.fr/
Prenons l'alphabet courant A, B, C, ... Z et plaçons le dans un tableau.
| A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z |
Regardons les indices associés à chaque lettre.
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z |
À un indice correspond une lettre et à une lettre est associée un et un seul indice.
Définition
En généralisant à l'ensemble des caractères (,, é, %, ...), un caractère peut être représenté par un entier, donc avoir une représentation binaire en machine.
Définition
L'entier associé à un caractère est appelé point de code de ce caractère (0 est le point de code de
A. 25 le point de code deZ.)
Définition
On parle ainsi d'encodage de caractères : mécanisme qui gère les points de code en octets dans la mémoire de l’ordinateur, puis lit les octets à nouveau en points de code.
Il a existé et existe plusieurs encodages.
Encodage ASCII
En 1960, l'organisation internationale de normalisation (ISO) décide de créer la norme ASCII (American Standard Code for Information Interchange).
À chaque caractère est associé un nombre binaire sur 7 bits.
Source : Wikipédia
Comme vous pouvez le constater dans le tableau ci-dessus, au "A" majuscule correspond le code binaire (1000001)_2 (65)_{10} ou (41)_{16}
Question
Combien de points de code (et donc de caractères) peuvent être représentés grâce à l'encodage ASCII ?"
Solution
Avec 7 bits, on peut coder
2^7points de code, donc 128 caractères.
Travail à effectuer
- Quel est le point de code et la représentation en binaire, du caractère
a?- Comment grâce à la représentation, en binaire, peut-on savoir si une lettre est en majuscule ou minuscule ?
Solution
- Le caractère
aa pour point de code 97, soit(1100001)_2.- Le bit de rang 5 est égal à : - 1 si la lettre est en minuscule, - 0 si la lettre est en majuscule.
La norme ASCII convient bien à la langue anglaise, mais pose des problèmes dans d'autres langues, par exemple le français.
En effet, l'ASCII ne prévoit pas d'encoder les lettres accentuées.
Encodage ISO-8859-1
Cette norme reprend les mêmes principes que l'ASCII, mais les points de code associés à chaque caractère sont codés sur 8 bits.
Question
Combien de points de code (et donc de caractères) peuvent être représentés grâce à l'encodage ISO-8859-1 ?
Soution_
Sur 8 bits, on peut représenter
2^8points de code, soit 256 caractères... 2 fois plus que l'encodage ASCII.
Cette norme va être principalement utilisée dans les pays européens puisqu'elle permet d'encoder les caractères utilisés dans les principales langues européennes (la norme ISO-8859-1 est aussi appelée "latin1" car elle permet d'encoder les caractères de l'alphabet dit "latin").
Problème, il existe beaucoup d'autres langues dans le monde qui n'utilisent pas l'alphabet dit "latin", par exemple le chinois ou le japonais ! D'autres normes ont donc dû voir le jour.
Des changements de configuration sont nécessaires pour afficher un texte dans l'encodage adéquat.
Encodage Unicode
Pour éviter ces problèmes, en 1991, une nouvelle norme a vu le jour : Unicode.
Unicode a pour ambition de rassembler tous les caractères existant afin qu'une personne utilisant Unicode puisse, sans changer la configuration de son traitement de texte, à la fois lire des textes en français ou en japonais.
Unicode est une table qui regroupe tous les caractères existant au monde. Unicode accepte plusieurs systèmes de codage : UTF-8, UTF-16, UTF-32.
Le plus utilisé, notamment sur le Web, est UTF-8.
Nombre s'octets en UTF-8
Pour encoder les caractères Unicode, UTF-8 utilise un nombre variable d'octets (jusque 4) :
- Les caractères de numéro 0 à 127 sont codés sur un octet dont le bit de poids fort est toujours nul,
- Les caractères de numéro supérieur à 127 sont codés sur plusieurs octets.
- Dans ce cas, les bits de poids fort du premier octet forment une suite de 1 de longueur égale au nombre d'octets utilisés pour coder le caractère, les octets suivants ayant 10 comme bits de poids fort.
| Représentation binaire en UTF-8 | Signification |
|---|---|
| 0xxxxxxx | 1 octet codant 1 à 7 bits |
| 110xxxxx 10xxxxxx | 2 octets codant 8 à 11 bits |
| 1110xxxx 10xxxxxx 10xxxxxx | 3 octets codant 12 à 16 bits |
| 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx | 4 octets codant 17 à 21 bits |
Méthode pour obtenir la représentation binaire en UTF-8 d'un caractère
- Représenter le point de code associé au caractère en binaire
- En fonction du nombre de bits, définir le nombre d'octets nécessaires pour une représentation en UTF-8
- Découper les blocs de bits en autant d'octets nécessaires.
Exemple : le caractère A a pour point de code 65 dans la table Unicode.
- Représentation binaire de 65 : 100 0001
- 7 bits sont nécessaires
\rightarrow 1 octet nécessaire pour le représenter en UTF-8 - Représentation en UTF-8 : 01000001 ou
(41)_{16}
Exemple : le caractère œ a pour point de code 339 dans la table Unicode.
- Représentation binaire de 339 : 1 0101 0011
- 9 bits sont nécessaires
\rightarrow2 octets nécessaires pour le représenter en UTF-8 - l'octet de poids faible codant les 6 bits de poids faible, l'octet poids fort codant les 3 bits de poids forts
- Représentation en UTF-8 : 1100101 10010011 ou
(\text{C}5\,93)_{16}
Travail à effectuer
- Quelle est la représentation binaire du caractère
b(point de code : 98) en UTF-8 ?- Quel est le point de code représenté par
(\text{C}2\,80)_{16}en UTF-8 ?
Solution
- Le point de code 98 a comme représentatio binaire :
(1100010)_
- 7 bits sont nécessaires ⇒ 1 octet nécessaire pour le réprésenter en UTF-8
- Représentation en UTF-8 : 01100010 ou
(62)_{16}(\text{C}2\,80)_{16} = (11000010\,10000000)_{16}
Le point de code est représenté par les bits 11000010 10000000. Soit (10000000)_2 = (128)_{10}
| Point de code | Caractère | Représentation binaire UTF-8 |
|---|---|---|
| 66 | B | 01000010 |
| 233 | é | 11000011 10101001 |
| 8364 | € | 11100010 10000010 10101100 |
| 119070 | 𝄞 | 11110000 10011101 10000100 10011110 |
Observation
Dans toute chaîne de caractères UTF-8, on remarque que :
- tout octet de bit de poids fort nul code un caractère ASCII sur un octet,
- tout octet de bits de poids fort valant 11 est le premier octet d'un caractère codé sur plusieurs octets,
- tout octet de bits de poids fort valant 10 est à l'intérieur d'un caractère codé sur plusieurs octets.
