Vous êtes sur la page 1sur 10

Représentation des données

Encodage : ASCII, ISO-8859-1, UNICODE

NOTATION : Barème sur 40 du travail en classe et à la maison : 1,25pts par question puis exercice final sur 14,5 pts
( 2+2+2+1,5+1,5+1,5+2+4)

Nous savons qu'un ordinateur est uniquement capable de traiter des données binaires, comment sont donc
codés les textes dans un ordinateur ? Ou plus précisément, comment sont codés les caractères dans un
ordinateur ?
Activité 1 : Utilisation d’un logiciel
On commence parce se connecter au site suivant : https://www.prepostseo.com/tool/fr/binary-translator

Voici le code binaire d’un texte :


01000010 01110010 01100001 01110110 01101111 00101100 00100000 01110100 01110101 00100000 01100001 01110011 00100000
01110000 01110010 01100101 01110011 01110001 01110101 01100101 00100000 01110100 01101111 01110101 01110100 00100000
01110100 01110010 01101111 01110101 01110110 11101001 00101110 00101110 00101110
1) À l’aide du logiciel fourni sur le site ou d’un autre, retrouver le texte contenu dans le code.
Bravo, tu as presque tout trouvé...
2) Avec quelle norme d’encodage des caractères ce logiciel est-il compatible ? (justifier la réponse en expliquant votre démarche et
l’astuce utilisée. Il est peut-être plus simple de trouver avec FIREFOX)
Encodage UTF-8,

Activité 2 :
Nous avons tous un jour reçu un courriel bizarre ou lu une page web telle que celle-ci :

Comment cela se fait-il ? Pourquoi comprend-on à peu près mais pas complètement ? Parce que certains caractères ASCII ne sont pas
répertoriés dans l’encodage.

Activité 3 : Codage et Internet


Ouvrez un navigateur Internet comme Firefox (c’est peut-être plus facile avec celui-ci), Chrome, Internet Explorer, Safari ou Opéra. Dans la
barre d’outils du premier on peut voir à « Affichage », « Encodage des caractères » que c’est l’UTF-8 qui est sélectionné par défaut.
Changeons cela et sélectionnons Europe Occidentale (Windows). Les petits caractères désagréables apparaissent. Que s’est-il passé ? En
allant dans « Outils », « Informations sur la page », on voit que cette page est encodée en UTF-8. Lorsque le lecteur est lui aussi en UTF-8
tout va bien. Dès qu’on change le paramètre du lecteur (ici, le navigateur), des incompatibilités apparaissent.
En utilisant le navigateur web, et en allant dans « Affichage », « Source », on obtient ceci:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<head>
<title>Phare</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body>
Prenons l’exemple typique de la lumière émise par un phare maritime : elle est d’abord indivisible, son coût de production étant alors
indépendant du nombre d'utilisateurs ; elle possède une propriété de non-rivalité (elle ne se détruit pas dans l'usage et peut donc être adoptée

Encodage du texte Page 1 sur 8


par un nombre illimité d'utilisateurs) ; elle est également non excluable car il est impossible d’exclure de l’usage un utilisateur, même si ce
dernier ne contribue pas à son financement.
</body>
On peut lire l’entête de la page html visitée. Où se situe l’information relative à l’encodage?

On peut aussi dans « Affichage », « Codage », sélectionner Grec (ISO) et se rendre compte en lisant le texte, que le « à » a été remplacé par
un « L » à l’envers dit Gamma.

I. Rappels sur le binaire


Une machine ne connait que les nombres 0 et 1(enfin, un signal électrique correspondant à 0 ou 1). Mais
nous avons vu qu’elle pouvait ainsi utiliser des nombres entiers naturels. Donc pour écrire du texte, une
solution est d’associer chaque caractère à un entier.

Définition (rappel) : Le bit (contraction de Binary Digit) est l’unité la plus simple en informatique. Il ne
peut prendre que 2 valeurs (désignées le plus souvent par 0 et 1).

Le bit sert essentiellement à représenter un « état » : vrai ou faux, oui ou non, le courant électrique passe
ou ne passe pas ….
Le mot « bit » a été popularisé par Claude Shannon, ingénieur en génie électrique et mathématicien du
XXème siècle, qui en attribue l’invention à John Turkey, l’un des plus importants mathématiciens
américains du XXème siècle.

Le système binaire permet d’écrire et d’encoder des nombres et des caractères.

Définition (rappel) : Un octet est un octuplet (un multiplet de 8 bits), c'est-à-dire une suite de 8 bits.

II. Code ASCII (American Standard Code for Information Interchange)

Avant 1960 de nombreux systèm

es de codage de caractères existaient, ils étaient souvent incompatibles entre eux.

En 1960, l'organisation internationale de normalisation (ISO International Organization for


Standardization) décide de mettre un peu d'ordre dans ce bazar en créant la norme ASCII (American
Standard Code for Information Interchange).

Dans le code ASCII inventé en 1963, à chaque caractère est associé un nombre binaire sur 8 bits (1 octet).
En fait, seuls 7 bits sont utilisés pour coder un caractère, le 8e bit n'est pas utilisé pour le codage des
caractères. La plupart des ordinateurs travaillant sur une base d’octets, il reste 1 bit de disponible.
Ce 8ème bit est soit non employé, dans ce cas il reste à 0, soit utilisé pour le contrôle de parité (c’est une
sécurité pour éviter les erreurs qui étaient très fréquentes dans les premières mémoires électroniques).

Avec 7 bits il est possible de coder jusqu'à 128 caractères ce qui est largement suffisant pour un texte écrit
en langue anglaise (pas d'accents et autres lettres particulières). Il inclut les lettres majuscules, minuscules,
les chiffres, les signes de ponctuation, quelques signes arithmétiques et typographiques divers et enfin 32
caractères de commandes utilisables pour la mise en page ou les protocoles de communication.

Encodage du texte Page 2 sur 8


Exemples :

Le caractère « A » est codé en ASCII par le nombre 65 (dans le système décimal), qui correspond au
nombre binaire 01000001, et au nombre hexadécimal 41.

Quel est le code binaire du "a" minuscule en ASCII? 01100001

Remarques :
 Chaque caractère d’un texte est codé sur un octet. Un texte de 10 000 caractères est donc codé sur
10000 octets soit 10 kilo-octets (10 ko).
 Comme vous pouvez le constater, certains codes ne correspondent pas à des caractères (de 0 à
(32)10), nous n'aborderons pas ce sujet ici.

Exercice :
1) Quelle est la taille (en ko) d’un fichier contenant 75 000 caractères ? 75 ko

2) a) On tape la phrase « bonjour à tous. » dans un fichier crée avec le logiciel Notepad++ sous
Windows. Quelle est la taille (en octets) de ce fichier quand on le sauvegarde sur le disque dur ? 1
ko.

b) On tape la même phrase dans un fichier crée avec le logiciel Open writer de la suite Open Office.
La taille du fichier sauvegardé est 9 ko. (ou autre taille avec un autre logiciel).
Comment expliquer cette taille ? D’autres fonctions codées en binaire sont prises en compte.

Encodage du texte Page 3 sur 8


En PYTHON , on peut visualiser les 128 caractères et les codes correspondants avec les fonctions chr
et ord. Présenter ce que vous avez visualisé ici :

Nous pouvons remarquer qu’entre les caractères en majuscules et les caractères en minuscules, il y a 1
seul bit de différence, le deuxième à partir de la gauche.

Lecture de la table ci-dessous : CODE ASCII

Exercice : À l’aide d’une table ASCII, répondre aux questions suivantes :


1) Convertir en binaire la phrase suivante : Bonjour cher ami.
Réponse : 01000010 01101111 01101110 01101010 01101111 01110101 01110010 00100000 01100011
01101000 01100101 01110010 00100000 01100001 01101101 01101001 00101110

2) Que se cache derrière le code binaire suivant ?


01101001 01101110 01100110 01101111 00100000 01100110 01101111 01110010
00100000 01100101 01110110 01100101 01110010 00100000 00100001
Réponse : info for ever !

III. ISO 8859-1

Encodage du texte Page 4 sur 8


Le système ASCII était suffisant pour la langue anglaise mais pas pour d’autres. Pour les autres langues,
par exemple le français, de nombreux systèmes d’encodage ont été crées comme par exemple l’ISO 8859-
1 qui rajoute les lettres à accents.
Ce système reprend les 128 codes ASCII (de 0 à 127), et en ajoute 128 (de 128 à 255). Le codage est donc
fait sur 8 bits et par exemple le « é » est représenté par le nombre 233.
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, par exemple la norme
"GB2312" pour le chinois simplifié ou encore la norme "JIS_X_0208" pour le japonais.

Cette multiplication des normes a très rapidement posé problème. Imaginons un français qui parle le
japonais. Son traitement de texte est configuré pour reconnaitre les caractères de l'alphabet "latin" (norme
ISO-8859-1). Un ami japonais lui envoie un fichier texte écrit en japonais. Le français devra modifier la
configuration de son traitement afin que ce dernier puisse afficher correctement l'alphabet japonais. S'il
n'effectue pas ce changement de configuration, il verra s'afficher des caractères ésotériques.

Lecture de la table :

Exemples A COMPLETER:
L Binaire Hexadécimal Décimal
0100 1100 4C 76

4 12 0x4C
z Binaire Hexadécimal Décimal
0111 1010 7A 122

d Binaire Hexadécimal Décimal


0110 0100 64 100

Encodage du texte Page 5 sur 8


IV. UNICODE
Le problème est que d’une langue à l’autre les systèmes ne sont pas compatibles excepté avec l’ASCII.
Le système UNICODE a été créé au début des années 1990 (1991) pour avoir une compatibilité
mondiale.

C’est un codage sur 16 bits, les 7 bits de poids faible de l’UNICODE produisent les mêmes caractères que
ceux de l’ASCII.

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 uniquement une table qui regroupe tous les caractères existant au monde, il ne s'occupe pas de
la façon dont les caractères sont codés dans la machine.

Unicode accepte plusieurs systèmes de codage : UTF-8, UTF-16, UTF-32. Le plus utilisé, notamment sur
le Web, est UTF-8.

Pour encoder les caractères Unicode, UTF-8 utilise un nombre variable d'octets : les caractères
"classiques" (les plus couramment utilisés) sont codés sur un octet, alors que des caractères "moins
classiques" sont codés sur un nombre d'octets plus important (jusqu'à 4 octets). Un des avantages d'UTF-8
c'est qu'il est totalement compatible avec la norme ASCII : Les caractères Unicode codés avec UTF-8 ont
exactement le même code que les mêmes caractères en ASCII.

Quel est le code binaire du "b" minuscule Unicode codé avec UTF-8 ? 01100010

Le code utilise des plages de valeurs pour les caractères comme par exemple :
 Grec et copte

Encodage du texte Page 6 sur 8


Généralement en Unicode, un caractère 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.

Le nombre UTF représente le nombre minimal de bits de codets (de groupes de signes représentant une
information) avec lesquels un point de code (valeur numérique qui représente un caractère dans l’espace
de codage des caractères) valide est représenté.

 UTF-8 est par exemple le plus commun pour les applications comme Unix et Internet. Son codage de
taille variable lui permet d’être en moyenne moins coûteux en occupation mémoire.
 UTF-16 est un bon compromis lorsque la place mémoire n’est pas trop restreinte, car la grande
majorité des caractères Unicode assignés pour les langues modernes peuvent être représentés sur 16
bits.
 UTF-32 est utilisé lorsque la place mémoire n’est pas un problème et que l’on a besoin d’avoir accès à
des caractères de manière directe et sans changement de taille (par exemple les hiéroglyphes
égyptiens). L’avantage de cette transformation est que tous les codets ont la même taille. Il n’est donc
pas nécessaire de lire des codets supplémentaires pour déterminer le début de la représentation d’un
point de code. Toutefois, ce format est particulièrement peu économique (y compris en mémoire)
puisqu’il « gaspille » inutilement au moins un octet (toujours nul) par caractère.

Exercice : Avant l’apparition de l’Unicode, il n’était pas rare de recevoir un courriel comme celui-ci :
..
« Bonjour mon ami Barnabé. Jâ€TMespà que vous allez bien. Moi, par trop. Jâ€TMai besoin de
100 000 francs pour rentrer chez moi. Si vous pouviez mâ€TMenvoyer cette somme par virement
bancaire, je vous en serez éternellement reconnaissant.
Votre dévou é Jos éphine. »

Encodage du texte Page 7 sur 8


1) Expliquez la raison pour laquelle ce message comporte des caractères non désirés.
Parce que certains caractères ASCII ne sont pas répertoriés dans l’encodage avant l’apparition de l’Unicode.

2) À priori, quel est l’encodage du message original ? UTF-8 car certains caractères ont pu être mal
interprétés.

Notations:  Le préfixe 0x indique le codage


hexadécimal

 Le préfixe 0b indique le codage binaire

 Le préfixe U+ indique un point de code en


Unicode, en Python le préfixe sera u\

Principe de l'encodage UTF-8 avec la plage des caractères représentables et l'encodage utilisé :

Exercices
1- Sachant que le point de code du symbole é est 233, donner la séquence de points de code du mot
élégance, puis les octets en binaire correspondant à l'encodage UTF-8 de ce mot.

2- Pour chacun des caractères suivants, dont le point de code est donné en décimal, donner
l’encodage UTF-8 du caractère, en donnant les octets en décimal et en hexadécimal :
a) caractère A ( point de code 65) b) caractère è (point de code 232)
3- Pour chacune des séquences d’octets suivantes, représentées en base 10, dire si elle représente une
séquence UTF-8 valide et si oui combien de caractères sont représentés (justifier).
a) 126.64.100 b) 198.129.129 c) 227.180.140

4- Ecrire une fonction printASCII(s) qui affiche à l'écran les codes ASCII au format hexadécimal
d'une chaine de caractères.

5- L'algorithme rotation13 est un algorithme très simple de chiffrement qui consiste à décaler de 13
caractères chaque lettre d'un texte. Par exemple le mot python est transformé en clguba.
Ecrire en Python une fonction rotation13(s) en supposant que la chaine passée en argument ne
contienne que des caractères entre a et z (en minuscule) et éventuellement des espaces
(uniquement le caractère ` `). Votre fonction ne doit décaler que les lettres de l'alphabet (elle ne
touche donc pas aux espaces). Elle renvoie une chaine de caractères.

Encodage du texte Page 8 sur 8


Réponses :
1) Séquence de points de code du mot "élégance": 233, 108, 233, 103, 97, 110, 99, 101
Les octets en binaire correspondant à l'encodage UTF-8 du mot "élégance" sont:
é : 11000011 10010101
l : 11011000 10111000
é : 11000011 10010101
g : 11001101 10001111
a : 01100001
n : 01101110
c : 01100011
e : 01100101

2)
a) Caractère A (65 en décimal) :
Le point de code Unicode du caractère A est 65 en décimal.
Le caractère A a un point de code inférieur à 128, donc il est représenté sur un seul octet en UTF-8.
En UTF-8, le caractère A est encodé sur un seul octet correspondant à 65 en décimal et 41 en
hexadécimal.

b) Caractère è (232 en décimal) :


Le point de code Unicode du caractère è est 232 en décimal.
Le point de code 232 nécessite plusieurs octets pour être encodé en UTF-8.
En UTF-8, le caractère è est encodé sur deux octets : 195 (C3 en hexadécimal) suivi de 168 (A8 en
hexadécimal).

3) Pour chaque séquence d'octets :


a) 126.64.100: Cette séquence n'est pas une séquence UTF-8 valide car le premier octet 126 ne correspond
pas à un octet UTF-8 valide.
b) 198.129.129: Cette séquence est une séquence UTF-8 valide. Elle représente 2 caractères.
c) 227.180.140: Cette séquence n'est pas une séquence UTF-8 valide car le premier octet 227 ne
correspond pas à un octet UTF-8 valide.

4) et 5) voir fichier python

Encodage du texte Page 9 sur 8


Sites pouvant aider :
https://unicode-table.com/fr/blocks/
http://sdz.tdct.org/sdz/comprendre-les-encodages.html
http://usefulwebtool.com/fr/convertir-texte-en-binaire.php

Encodage du texte Page 10 sur 8

Vous aimerez peut-être aussi