Files
1ereNSI/representation_base/chapitre_5
2021-10-01 11:22:41 +02:00
..
2021-10-01 11:22:41 +02:00
2021-10-01 11:22:41 +02:00
2021-10-01 11:22:41 +02:00

Représentation d'un texte en machine

Attendus

Contenus Capacités attendues
Représentation dun texte en machine.
Exemples des encodages ASCII, ISO-8859-1, Unicode
Identifier lintérêt des différents systèmes dencodage.
Convertir un fichier texte dans différents formats dencodage.

Contexte

Martine écrit en UTF-8

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 de Z.)

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 lordinateur, 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.

Table ASCII

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^7 points de code, donc 128 caractères.

Travail à effectuer

  1. Quel est le point de code et la représentation en binaire, du caractère a ?
  2. Comment grâce à la représentation, en binaire, peut-on savoir si une lettre est en majuscule ou minuscule ?

Solution

  1. Le caractère a a pour point de code 97, soit (1100001)_2.
  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^8 points 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.
Définition du nombre d'octets utilisés
Représentation binaire en UTF-8Signification
0xxxxxxx1 octet codant 1 à 7 bits
110xxxxx 10xxxxxx2 octets codant 8 à 11 bits
1110xxxx 10xxxxxx 10xxxxxx3 octets codant 12 à 16 bits
11110xxx 10xxxxxx 10xxxxxx 10xxxxxx4 octets codant 17 à 21 bits

Méthode pour obtenir la représentation binaire en UTF-8 d'un caractère

  1. Représenter le point de code associé au caractère en binaire
  2. En fonction du nombre de bits, définir le nombre d'octets nécessaires pour une représentation en UTF-8
  3. 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.

  1. Représentation binaire de 65 : 100 0001
  2. 7 bits sont nécessaires \rightarrow 1 octet nécessaire pour le représenter en UTF-8
  3. Représentation en UTF-8 : 01000001 ou (41)_{16}

Exemple : le caractère œ a pour point de code 339 dans la table Unicode.

  1. Représentation binaire de 339 : 1 0101 0011
  2. 9 bits sont nécessaires \rightarrow 2 octets nécessaires pour le représenter en UTF-8
  3. l'octet de poids faible codant les 6 bits de poids faible, l'octet poids fort codant les 3 bits de poids forts
  4. Représentation en UTF-8 : 1100101 10010011 ou (\text{C}5\,93)_{16}

Travail à effectuer

  1. Quelle est la représentation binaire du caractère b (point de code : 98) en UTF-8 ?
  2. Quel est le point de code représenté par (\text{C}2\,80)_{16} en UTF-8 ?

Solution

  1. 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}
  2. (\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}

Exemples de codage UTF-8
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.