Comment un texte devient-il une suite de bits, et combien de caractères Unicode peut-on coder ?
L'ASCII code 2⁷ = 128 caractères. Unicode prévoit 1 114 112 points de code (de 0 à 10FFFF en hexadécimal), dont 1 112 064 utilisables. UTF-8 les écrit sur 1 à 4 octets, avec des préfixes qui rendent le décodage sans ambiguïté.
Grand oral session 2027 : exposé de 10 minutes debout, puis 10 minutes d'échange, sans calculatrice. Plan prévu pour 9,5 min.
Pourquoi cette question : un modèle d'introduction
Le jury attend que vous expliquiez pourquoi vous avez choisi la question. Inspirez-vous de ce modèle, mais racontez votre propre parcours.
J'ai ouvert un jour un fichier où les « é » étaient devenus « é ». Cette erreur m'a intrigué : le texte n'avait pas changé, seulement la façon de le lire. J'ai cherché comment un caractère devient un nombre, puis des bits, et j'ai découvert que le codage UTF-8 est un petit chef-d'œuvre de dénombrement.
L'enjeu et les notions du programme
Dénombrer les motifs possibles d'un codage de longueur variable et comprendre pourquoi il se décode sans ambiguïté.
Mathématiques
- Principe multiplicatif, nombre de mots binaires de longueur n (terminale)
- Puissances de 2, sommes (première)
- Raisonnement logique, unicité (seconde)
Numérique et sciences informatiques
- Représentation d'un texte : ASCII, ISO-8859-1, Unicode (première)
- Encodage UTF-8 (première)
Le plan de l'exposé en 9,5 min
1. Introduction
1 minUn texte est stocké comme une suite de nombres, chacun associé à un caractère. Problématique : combien de caractères peut-on coder, et comment découper une suite de bits pour retrouver les caractères quand ils n'ont pas tous la même longueur ?
2. Mathématiques : dénombrer les codes
4 minL'ASCII utilise 7 bits : 2⁷=128 caractères, assez pour l'anglais mais sans accents. Unicode attribue un numéro, le point de code, à chaque caractère de toutes les écritures : de 0 à 10FFFF₁₆, soit 1 114 112 valeurs, dont 2 048 réservées, donc 1 112 064 caractères possibles.
UTF-8 écrit un point de code sur 1 à 4 octets. Un octet de la forme 0xxxxxxx : 7 bits libres, 2⁷=128 codes (l'ASCII, inchangé). Deux octets 110xxxxx 10xxxxxx : 11 bits libres, 2¹¹=2048 codes. Trois octets : 16 bits libres, 2¹⁶=65 536. Quatre octets : 21 bits libres, 2²¹≈2,1 millions, plus qu'il n'en faut.
Pourquoi le découpage est sans ambiguïté : le premier octet annonce la longueur par son nombre de 1 initiaux, et les octets de continuation commencent tous par 10, préfixe qu'aucun premier octet n'utilise.
3. NSI : l'erreur « é » expliquée
3 min« é » a pour point de code 233 ; en UTF-8, il s'écrit sur deux octets C3 A9. Un logiciel qui croit lire de l'ISO-8859-1 (un octet par caractère) affiche deux caractères : C3 donne « à » et A9 donne « © ». D'où « é ».
En Python, encoder la chaîne « é » en UTF-8 renvoie bien les deux octets c3 et a9. Leçon pratique : un fichier texte n'a de sens qu'accompagné de son encodage ; c'est pourquoi les pages web le déclarent dans leur en-tête.
4. Conclusion
1,5 minUnicode numérote plus d'un million de caractères et UTF-8 les code sur 1 à 4 octets grâce à des préfixes qui rendent la lecture non ambiguë, tout en restant compatible avec l'ASCII. J'ouvre sur les codes préfixes en compression, comme le code de Huffman, qui reposent sur la même idée.
Ce que j'écris au tableau
Pas de calculatrice ni de support numérique : un calcul clé écrit au tableau rend l'exposé concret et montre la solidité des connaissances.
10FFFF₁₆+1=1 114 112 points de code é =233 longmapsto C3 A9
Conclusion : la réponse à la question
Un texte devient une suite de bits par deux étapes : un numéro par caractère (Unicode), puis une écriture en octets (UTF-8). Le dénombrement des motifs montre que le codage a assez de place, et les préfixes qu'il se lit sans erreur.
Les questions probables du jury
Pendant les 10 minutesd'échange, le jury vous fait préciser et approfondir, sur tout le programme de vos spécialités en lien avec la question.
Combien de bits libres dans un code UTF-8 de 2 octets ?
16-3-2=11 : le premier octet perd 3 bits (110), le second 2 (10).
Pourquoi garder l'ASCII sur un seul octet ?
Pour la compatibilité : un texte anglais en ASCII est déjà un texte UTF-8 valide, et il reste compact.
Combien de mots binaires de longueur n existe-t-il ?
2ⁿ : deux choix pour chaque bit, principe multiplicatif.
Un émoji tient-il sur 1, 2, 3 ou 4 octets ?
Sur 4 octets en général : ses points de code dépassent 65 535.
Qu'est-ce qu'un code préfixe ?
Un code où aucun mot n'est le début d'un autre : on peut alors découper une suite sans séparateur.
Les pièges qui coûtent des points
- Confondre le point de code (un numéro) et son encodage (des octets).
- Croire que tous les caractères UTF-8 font 2 octets.
- Oublier les bits de préfixe dans le dénombrement.
Revoir les notions
Autres questions : représenter l'information
- Combien de bits faut-il pour écrire un nombre entier, et pourquoi le logarithme répond-il à la question ?
- Comment un ordinateur représente-t-il les nombres négatifs, et pourquoi 127 + 1 peut-il donner −128 ?
- Pourquoi un ordinateur ne peut-il pas représenter tous les nombres réels, et où ses erreurs sont-elles les plus grandes ?
- Combien de couleurs un écran peut-il afficher, et combien pèse une image non compressée ?
Préparer l'oral, pas seulement le contenu
Gestion des 20 minutes de préparation, usage du tableau, posture debout, réponses au jury : la méthode complète, conforme aux règles de la session 2027.
Méthode : traiter une question de Grand oral →