Unicode et unités de volume de données
Unicode et unités de volume de données
Objectifs cantonaux : O2.2, O2.4.
Cours complet sur la plateforme Runestone de Cédric Donner : Unicode.
Les limites de l’ASCII
! Le problème de l’ASCII
La table ASCII (128 caractères, 7 bits) ne contient que les lettres de l’alphabet latin sans accent, les chiffres et quelques symboles : impossible d’écrire « café », un caractère chinois, ou un émoji. Il fallait une table universelle.
▷ Définition — Unicode
Unicode est une table de caractères universelle qui associe un nombre unique — appelé point de code, noté U+XXXX en hexadécimal — à chaque caractère de (presque) toutes les langues du monde, ainsi qu’à des milliers de symboles (émojis, symboles mathématiques, pions d’échecs, …).
| Caractère | Point de code |
|---|---|
A |
U+0041 |
é |
U+00E9 |
Ж (cyrillique) |
U+0416 |
| 😇 | U+1F607 |
Remarquez que les 128 premiers points de code Unicode (de U+0000 à U+007F) correspondent exactement à la table ASCII : Unicode a été conçu pour rester compatible avec l’ASCII.
Pourquoi ne pas coder Unicode comme l’ASCII ?
La table Unicode contient environ 500’000 caractères. Coder chaque caractère sur un nombre fixe de bits (comme l’ASCII) poserait un problème :
! Le problème du gaspillage
Il faudrait au moins 19 bits pour coder 500’000 caractères (\(2^{18} = 262\,144\), insuffisant ; \(2^{19} = 524\,288\), suffisant), donc 3 octets par caractère. Or la grande majorité des textes sur Internet est en anglais (donc en ASCII) : coder chaque caractère sur 3 octets au lieu d’un seul gaspillerait énormément d’espace de stockage.
▷ La solution : UTF-8
UTF-8 encode les caractères Unicode avec une longueur variable : 1 octet pour les caractères ASCII (les plus fréquents), jusqu’à 4 octets pour les caractères plus rares (émojis, alphabets peu utilisés). Un texte purement en anglais occupe donc en UTF-8 exactement la même place qu’en ASCII — pas de gaspillage.
Unités de mesure de volume de données
▷ Rappel — Octet
Un octet est un paquet de 8 bits. C’est l’unité de base pour mesurer un volume de données en informatique — de la même manière que le mètre est l’unité de base pour une longueur.
Comme les volumes de données peuvent être immenses, on utilise des préfixes (comme en physique : km, MW, …) pour multiplier l’unité de base :
◈ Unités de volume de données
| Unité | Équivalent |
|---|---|
| 1 octet (o) | 8 bits |
| 1 kilo-octet (Ko) | 1’000 octets |
| 1 méga-octet (Mo) | 1’000 Ko |
| 1 giga-octet (Go) | 1’000 Mo |
| 1 téra-octet (To) | 1’000 Go |
| Type de fichier | Ordre de grandeur |
|---|---|
| Document texte sans image | quelques Ko |
| Photo ou fichier audio MP3 | quelques Mo |
| Vidéo de quelques minutes en basse qualité | quelques centaines de Mo |
| Film / gros jeu vidéo | plusieurs Go |
| Film 4K non compressé (studio) | plusieurs To |
Exercice 1 — Unicode
En utilisant ord() et hex() en Python, retrouvez le point de code Unicode (sous la forme U+XXXX) des caractères é, € et d’un emoji de votre choix.
for symbole in "é€":
print(symbole, "->", hex(ord(symbole)))Exercice 2 — conversions d’unités
Convertissez dans la bonne unité :
- \(14\) Ko \(= \, ?\) octets
- \(1580\) Mo \(= \, ?\) Go
- \(2.345\) To \(= \, ?\) Mo
- \(50\) octets \(= \, ?\) bits
Exercice 3 — quantité de données
Une clé USB de 16 Go peut stocker combien de fichiers MP3 de 3.5 Mo en moyenne ?
Exercice 4 — un programme de conversion
Écrivez une fonction convert(volume, unite1, unite2) qui convertit automatiquement un volume de données d’une unité à une autre. Complétez le squelette suivant :
b = 1
kb = 1000 * b
Mb = 1000 * kb
Gb = 1000 * Mb
o = 8 * b
ko = 1000 * o
Mo = 1000 * ko
Go = 1000 * Mo
def convert(volume, src_unite, dest_unite):
return volume * src_unite / dest_unite
print(convert(16, Go, Mo)) # 16 Go convertis en Mo -> 16000.0
print(convert(2.34, Mo, ko)) # 2.34 Mo convertis en ko -> 2340.0! Pourquoi ça marche
Chaque unité est exprimée en nombre de bits (l’unité la plus fine). Diviser un volume par une unité cible convertit implicitement dans cette unité — c’est le même principe qu’une analyse dimensionnelle en physique.
Devoir donné par Cédric
Terminer les exercices d’unités de volume de données et de conversion Unicode.