Unicode et unités de volume de données

Denis Dréano
INFO2-04

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, …).

→ Exemple 1 — quelques points de code Unicode
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
→ Exemple 2 — ordres de grandeur
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.