Vous êtes sur la page 1sur 26

représentation et codage de l’information

4. représentation des données textuelles

Pierre Réty
février 2021
L1 informatique — Université d’Orléans
Retour sur le codage des caractères
Codage des caractères

Le langage écrit repose sur l’utilisation d’alphabets, de


graphèmes, de symboles.

Les fichiers contiennent des suites d’octets.

La convention qui associe un caractère à un code numérique


est appelée codage de caractères.

Remarque Une fois cette convention choisie, il reste encore


pour l’afficher à associer une représentation graphique à une
suite de caractères, mais c’est une autre histoire (glyphe,
ligature, etc).

1
ASCII

Norme incontournable, codage de caractères sur 7 bits adapté


à l’alphabet anglais + 33 codes de contrôle.
Un 0 est rajouté à gauche pour obtenir un octet complet (8 bits).

Ainsi, le caractère a est codé par l’octet 61 = 0110 0001

2
ISO 8859
Norme définissant 16 façons ISO-8859-𝑛 d’étendre ASCII, avec
le bit gauche à 1, pour la gestion d’autres langues :
• ISO-8859-1, latin-1, européen occidental
• ISO-8859-2, latin-2, européen central
• ISO-8859-3, latin-3, européen du Sud
• ISO-8859-4, latin-4, européen du Nord
• ISO-8859-5, cyrillique
• ISO-8859-6, arabe
• ISO-8859-7, grec
• ISO-8859-8, hébreu
• ISO-8859-9, latin-5, turc
• ISO-8859-10, latin-6, nordique
• ISO-8859-11, thaï
• ISO-8859-13, latin-7, balte
• ISO-8859-14, latin-8, celtique
• ISO-8859-15, latin-9, latin-1 + € 3
• ISO-8859-16, latin-10, européen du Sud-Est
ISO-8859-15 (latin-1 + codage de €)

𝑥= 0 1 2 3 4 5 6 7 8 9 𝐴 𝐵 𝐶 𝐷 𝐸 𝐹

Ainsi, le caractère é est codé par l’octet 𝐸9 = 1110 1001

4
EBCDIC

Codage exotique utilisé par les mainframe IBM.

5
Unicode

Compatible avec Universal Character Set (UCS, ISO/IEC 10646)

Standard visant à normaliser les échanges de texte au niveau


mondial. Modélise les caractères et leurs traitements.

Décrit plus de 110000 caractères couvrant plus de 100 écritures.

Associe un mot binaire à chaque caractère : les 256 premiers


sont identiques à ISO-8859-1 (latin-1).

Initialement codé sur 16 bits, aujourd’hui sur 17 plans de 65536


caractères, soit 1114112 caractères codables de 0x0 à 0x10FFFF.
Rappel : 0x10FFFF est le nombre 10FFFF écrit en base 16.

Notation : U+0000 à U+FFFF pour le premier plan (BMP),


6
U+10000 à U+10FFFF pour les autres plans.
Implémentation de l’unicode : UTF-32

Chaque mot binaire est représenté sur 32 bits, en complétant


par des 0 à gauche.

Un texte, même en anglais, occupe quatre fois plus de place !

Peu utilisé en pratique, éventuellement pour la représentation


interne de chaînes Unicode.

7
Implémentation de l’unicode : UTF-8

UTF-8 est un codage à longueur variable compatible ASCII et


latin-1, très répandu, en particulier pour le Web et le mail.
bits dernier code octet 1 octet 2 octet 3 octet 4
7 U+7F 0xxxxxxx
11 U+7FF 110xxxxx 10xxxxxx
16 U+FFFF 1110xxxx 10xxxxxx 10xxxxxx
21 U+10FFFF 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
Si besoin, on complète par des 0 à gauche pour avoir le nombre de bits demandés.

Exemple Unicode UTF-8


@ U+40 1000000 (7 bits) 01000000 0x40
é U+E9 000 11101001 (11 b) 11000011 10101001 0xC3 0xA9
€ U+20AC 00100000 10101100 11100010 10000010 10101100 0xE2 0x82 0xAC
Rem : les codages unicode des caractères @ et é sont les mêmes qu’en latin-1 (et
ASCII pour @). Mais en UTF-8, @ est codé sur 1 octet, é sur 2 octets, € sur 3 octets.
Les caractères anglais, donc codables en ASCII, sont codés sur 1 octet en UTF-8. 8
Normalisation

Histoire de compliquer un peu tout ça, Unicode propose


plusieurs manières de définir un même caractère :

é est codé U+00E9 ou U+0065 U+0301 (e suivi d’un accent aigü).

De plus, dans certains contextes, ont peut avoir envie


d’ interpréter à l’identique certains caractères à la sémantique
différente :

U+00C5 LATIN CAPITAL LETTER A WITH RING ABOVE : Å

U+212B ANGSTROM SIGN : Å

Unicode définit donc des normalisations du texte pour


permettre la comparaison de chaînes.
9
En pratique

En dehors du codage proprement dit, problème du codage des


fins de lignes : CR vs LF vs CRLF.

10
Fichier texte brut

Un fichier texte est une suite de codes de caractères dans un


encodage fixé (ASCII, latin-1, latin-9, UTF-8, …).
Ici, le fichier dumbo.txt est codé en UTF-8. cat et hexdump sont des commandes
exécutées dans un terminal sous Linux ou MacOS. Ne pas tenir compte des numéros
d’octets 000000, 000010, etc...

$ cat dumbo.txt
BlaBlaBlaBla
Un éléphant qui se balançait sur une toile d'araignée.

$ hexdump dumbo.txt
000000 42 6c 61 42 6c 61 42 6c 61 42 6c 61 0a 55 6e 20
000010 c3 a9 6c c3 a9 70 68 61 6e 74 20 71 75 69 20 73
000020 65 20 62 61 6c 61 6e c3 a7 61 69 74 20 73 75 72
000030 20 75 6e 65 20 74 6f 69 6c 65 20 64 27 61 72 61
000040 69 67 6e c3 a9 65 2e 0a 11
Base64 (Norme RFC 2045, 1996)

Afficher un texte UTF-8 avec l’alphabet américain.

On découpe la suite d’octets en mots de 6 bits.


Ainsi 3 octets = 4 mots de 6 bits.
chaque mot de 6 bits ⟹ entier compris entre 0 et 63
chaque entier ⟹ codé par le caractère :
0=A, 1=B,…, 25=Z, 26=a, …, 51=z, 52=0, …, 61=9, 62= +, 63= /

Remplissage (padding)
On complète par des zéros pour avoir un nombre entier de
mots de 6 bits.
si on ajoute 2 zéros, on rajoute = à la fin du texte codé
si on ajoute 4 zéros, on rajoute == à la fin du texte codé

12
0 A 17 R 34 i 51 z
1 B 18 S 35 j 52 0
2 C 19 T 36 k 53 1
3 D 20 U 37 l 54 2
4 E 21 V 38 m 55 3
5 F 22 W 39 n 56 4
6 G 23 X 40 o 57 5
7 H 24 Y 41 p 58 6
8 I 25 Z 42 q 59 7
9 J 26 a 43 r 60 8
10 K 27 b 44 s 61 9
11 L 28 c 45 t 62 +
12 M 29 d 46 u 63 /
13 N 30 e 47 v
14 O 31 f 48 w (pad) =
15 P 32 g 49 x
16 Q 33 h 50 y
13
Base64 (Norme RFC 2045, 1996)

Fichier texte en UTF-8.

$ cat dumbo.txt
BlaBlaBlaBla
Un éléphant qui se balançait sur une toile d'araignée.

$ python -m base64 -e < dumbo.txt


QmxhQmxhQmxhQmxhClVuIMOpbMOpcGhhbnQgcXVp
IHNlIGJhbGFuw6dhaXQgc3VyIHVuZSB0b2lsZSBk
J2FyYWlnbsOpZS4=

14
Données structurées
Structuration des données

Données non structurées :


• le contenu d’un fichier texte
• un enregistrement audio
• une collection de photographies

Données semi-structurées :
• une page web
• vos notes de cours
• un dictionnaire

Données structurées :
• les horaires de cinéma
• le contenu d’un agenda
• le système de réservation d’une compagnie aérienne 15
Modélisation relationnelle

Les données sont organisées en tables (ou relations).

id Interprète Titre Année


1 Led Zeppelin Stairway to Heaven 1971
2 AC/DC Highway to Hell 1979
… … … …

Colonnes champs, attributs

Lignes tuples, n-uplets

16
Le format textuel CSV

Le format de fichier CSV (comma-separated values) représente


un tableau par un texte.

Chaque ligne du fichier correspond à un enregistrement, une


ligne du tableau.

Les colonnes sont séparées par un séparateur (virgule ou


point-virgule).

id,Interprète,Titre,Année
1,Led Zeppelin,Stairway to Heaven,1971
2,AC/DC,Highway to Hell,1979

17
Données semi-structurées
XML

Un document XML (eXtensible Markup Language) est une


chaîne de caractère structurée par des balises.

• balise ouvrante : <bonjour>


• balise fermante : </aurevoir>
• balise vide : <message />

Toute balise ouvrante est fermée par une balise fermante de


même nom.

Une balise vide ou bien l’ensemble du texte entre une balise


ouvrante et la balise fermante correspondante forme un
élément.
18
<? xml version="1.0" encoding="utf-8" standalone="yes" ?>
<filmographie>
<film id="sw" acteur="cf,mh">
<titre>Star Wars</titre>
<annee>1977</annee>
</film>
<acteur id="cf" jouedans="sw">
<nom>Carrie Fisher</nom>
<adresse>
<rue>Maple St.</rue><ville>Hollywood</ville>
</adresse>
<adresse>
<rue>Locust Rd.</rue><ville>Malibu</ville>
</adresse>
</acteur>
<acteur id="mh" jouedans="sw">
<nom>Mark Hamill</nom>
<rue>Oak St.</rue>
<ville>Bollywood</ville>
</acteur>
</filmographie>
HTML : code source d’une page web

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"


"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><title>Exemple XHTML 1.0</title></head>
<body><h2>Texte codé en UTF-8, et décodé en latin-1 !</h2>
<ul>
<li>Tous les éléments doivent être explicitement balisés.</li>
<li>Les balises fermantes ne sont pas optionnelles.</li>
<li>Les noms d'éléments et d'attributs
<em class="important">doivent</em> être en minuscules.</li>
<li>Tous les attributs doivent avoir une valeur explicite
<input type="checkbox" checked="checked" value="..." />.</li>
<li>Les guillemets sont <em class="important">toujours</em>
obligatoires autour des valeurs d'attribut.</li>
<li>Les éléments vides doivent être fermés
<img src="i.png" alt="i"/>.</li>
</ul></body></html>
Affichage par le navigateur web

Le fichier HTML est codé en UTF-8.


Page web affichée avec décodage latin-1 :

Rem : Chaque é est codé sur 2 octets en UTF-8, ce qui donne 2 caractères en latin-1.

Page web affichée avec décodage UTF-8 :

21

Vous aimerez peut-être aussi