Aller au contenu

Numérique et sciences informatiques (spécialité) · Première

Encodage ASCII et Unicode : exercices corrigés de 1re NSI

Publié le 6 novembre 2026 · Mis à jour le 6 novembre 2026 · Signaler une erreur

L'essentiel

  • Un encodage associe un nombre entier à chaque caractère ; le texte stocké est une suite de nombres écrits en binaire.
  • L'ASCII utilise 7 bits (128 caractères) ; ISO-8859-1 (Latin-1) utilise 8 bits (256 caractères).
  • Unicode attribue à chaque caractère un point de code, de U+0000 à U+10FFFF ; UTF-8 l'écrit sur 1 à 4 octets.
  • Les 128 caractères ASCII ont le même codage en UTF-8 : un seul octet, avec les mêmes valeurs.
  • Taille d'un texte = somme des octets de chaque caractère, qui dépend de l'encodage choisi.
  • Un fichier lu avec un mauvais encodage affiche des caractères parasites : l'encodage doit être connu du lecteur.

Comment utiliser ces exercices

Ces exercices vont du simple calcul de nombre de combinaisons jusqu'à un petit programme de chiffrement. Cherche d'abord seul, puis ouvre les indices un par un, et seulement ensuite la correction. Écris chaque calcul sur ta feuille : en NSI, on te demande de justifier la démarche, pas seulement le résultat.

Rappels utiles avant de commencer

Pour aller plus loin : formes de codage

UTF-16 représente les entiers supérieurs à 65535 par des couples d'entiers plus petits, car ils ne tiennent pas sur 16 bits 2. L'UTF-32 utilise des unités de 32 bits 3, donc 4 octets par unité. Le choix de la forme de codage est un compromis entre taille en mémoire et simplicité de traitement : l'UTF-32 est gourmand en mémoire, l'UTF-8 a une longueur très variable 3.

Les exercices

Exercice 1 Combien de caractères en ASCII ?

★☆☆Environ 4 min

Le code ASCII associe un entier écrit sur 7 bits à chaque caractère.

  1. Combien de combinaisons de bits différentes existe-t-il sur 7 bits ?
  2. Que peut-on en déduire sur le nombre maximal de caractères codables en ASCII ?
Indice 1

Chaque bit vaut 0 ou 1 : combien de choix par bit, et combien de bits ?

Indice 2

Pour nn bits, il y a 2n2^n combinaisons.

Voir la correction pas à pas
  1. Chaque bit a 2 valeurs possibles (0 ou 1).

  2. Les choix sont indépendants d'un bit à l'autre : on multiplie, soit 2×2×⋯×22 \times 2 \times \dots \times 2 (7 fois) =27= 2^7.

  3. On calcule 27=1282^7 = 128.

  4. Un code différent par caractère : l'ASCII peut donc coder au plus 128 caractères, ce qui correspond bien aux 128 caractères ASCII cités dans les sources 3.

Sur nn bits on compte 2n2^n combinaisons : 7 bits donnent 128 codes possibles. C'est trop peu pour les accents, d'où l'apparition de jeux de caractères sur 8 bits puis d'Unicode.

Exercice 2 Le code d'une lettre par décalage

★☆☆Environ 5 min

En ASCII, les lettres majuscules de l'alphabet latin ont des codes consécutifs dans l'ordre alphabétique. On donne : le code de la lettre A est 65.

Quel est le code (en décimal) de la lettre F ?

Indice 1

Combien de lettres sépare A de F dans l'alphabet ?

Indice 2

Si les codes se suivent, le code de F est celui de A plus ce nombre de pas.

Voir la correction pas à pas
  1. Liste les lettres : A, B, C, D, E, F. De A à F, il y a 5 pas.

  2. Les codes étant consécutifs, chaque pas ajoute 1 au code.

  3. Code de F =65+5=70= 65 + 5 = 70.

Le code de F est 70. Cette régularité des codes est exploitée en programmation : on obtient le rang d'une lettre dans l'alphabet par une simple soustraction.

Exercice 3 Du code hexadécimal à la lettre

★☆☆Environ 6 min

Un fichier texte en ASCII contient un octet dont la valeur, notée en hexadécimal, est 0x48. On rappelle que A a pour code 65 en décimal.

  1. Convertis 0x48 en décimal.
  2. Quelle est la lettre correspondante ?
Indice 1

En hexadécimal à deux chiffres, 0xhl vaut 16×h+l16 \times h + l.

Indice 2

Compare ensuite ton résultat au code de A, en comptant les pas dans l'alphabet.

Voir la correction pas à pas
  1. Écris 0x48 : le chiffre des seizaines est 4, celui des unités est 8.

  2. Calcule 4×16+8=64+8=724 \times 16 + 8 = 64 + 8 = 72.

  3. Compare à A : 72−65=772 - 65 = 7, donc la lettre est 7 pas après A.

  4. En comptant : A(0), B(1), C(2), D(3), E(4), F(5), G(6), H(7). C'est la lettre H.

L'octet 0x48 vaut 72 en décimal et représente la lettre H. Passer par la base 10 puis par un décalage évite d'apprendre la table.

Exercice 4 Taille d'un texte en ASCII et en UTF-32

★★☆Environ 8 min

Un message contient 250 caractères, tous présents dans la table ASCII.

  1. Quelle est sa taille en octets s'il est enregistré en UTF-8 ?
  2. Quelle est sa taille en octets en UTF-32, où chaque caractère est écrit sur une unité de 32 bits ?

Donne la réponse numérique pour la question 2.

Indice 1

En UTF-8, un caractère ASCII occupe un seul octet.

Indice 2

Convertis les 32 bits d'une unité UTF-32 en octets.

Voir la correction pas à pas
  1. Question 1 : en UTF-8, les 128 caractères ASCII sont représentés sur un octet 3. Le texte occupe donc 250 octets.

  2. Question 2 : une unité de 32 bits fait 32/8=432 / 8 = 4 octets 3.

  3. Chaque caractère occupant une unité, la taille est 250×4=1000250 \times 4 = 1000 octets.

  4. Comparaison : le même texte est 4 fois plus gros en UTF-32, ce qui illustre le côté gourmand en mémoire de cette forme de codage 3.

En UTF-8 le message pèse 250 octets, en UTF-32 il pèse 1000 octets. Pour un texte surtout composé de caractères ASCII, l'UTF-8 est bien plus économique.

Exercice 5 Taille d'un texte multilingue en UTF-8

★★☆Environ 10 min

En UTF-8, un caractère occupe entre 1 et 4 octets. Un texte contient :

  • 10 caractères ASCII ;
  • 4 caractères qui s'écrivent chacun sur 2 octets ;
  • 2 caractères qui s'écrivent chacun sur 3 octets ;
  • 1 caractère qui s'écrit sur 4 octets.

Quelle est la taille totale du texte en octets ? Combien y a-t-il de caractères ?

Indice 1

Les caractères ASCII sont codés sur un octet en UTF-8.

Indice 2

Multiplie le nombre de caractères de chaque groupe par son nombre d'octets, puis additionne.

Voir la correction pas à pas
  1. Les 10 caractères ASCII occupent chacun 1 octet 3 : 10×1=1010 \times 1 = 10 octets.

  2. Les 4 caractères à 2 octets : 4×2=84 \times 2 = 8 octets.

  3. Les 2 caractères à 3 octets : 2×3=62 \times 3 = 6 octets.

  4. Le caractère à 4 octets : 1×4=41 \times 4 = 4 octets.

  5. Total : 10+8+6+4=2810 + 8 + 6 + 4 = 28 octets, pour 10+4+2+1=1710 + 4 + 2 + 1 = 17 caractères.

Le texte compte 17 caractères mais occupe 28 octets : en UTF-8, nombre de caractères et nombre d'octets diffèrent dès qu'un caractère n'est pas ASCII.

Exercice 6 Combien de points de code valides ?

★★★Environ 12 min

Les points de code Unicode sont des entiers allant de U+0000 à U+10FFFF. Les points de code valides en pratique forment deux intervalles : de U+0000 à U+D7FF, puis de U+E000 à U+10FFFF.

  1. Combien de valeurs contient l'intervalle total de 0 à 0x10FFFF ?
  2. Combien de points de code contiennent les deux intervalles valides réunis ?
Indice 1

Un intervalle de aa à bb inclus contient b−a+1b - a + 1 valeurs.

Indice 2

Convertis les bornes hexadécimales en décimal ou garde-les en notation hexadécimale dans ton calcul.

Voir la correction pas à pas
  1. Intervalle total : de 0 à 0x10FFFF inclus, soit 0x10FFFF + 1 = 1 114 112 valeurs, ce qui confirme l'ordre de grandeur d'environ 1,1 million annoncé par la source 2.

  2. Premier intervalle valide : de 0 à 0xD7FF, soit 0xD7FF + 1 = 55 296 valeurs.

  3. Second intervalle : de 0xE000 à 0x10FFFF, soit 1 114 111−57 344+1=1 056 7681\,114\,111 - 57\,344 + 1 = 1\,056\,768 valeurs.

  4. Total valide : 55 296+1 056 768=1 112 06455\,296 + 1\,056\,768 = 1\,112\,064.

  5. Vérification : il manque 1 114 112−1 112 064=2 0481\,114\,112 - 1\,112\,064 = 2\,048 valeurs, celles de 0xD800 à 0xDFFF, qui ne représentent aucun caractère valide 3.

L'espace d'Unicode comporte 1 112 064 points de code valides, sur 1 114 112 valeurs possibles. Un intervalle inclus se compte toujours avec « + 1 ».

Exercice 7 Le « é » précomposé ou décomposé

★★☆Environ 10 min

Unicode permet d'écrire « é » de deux manières : soit directement avec le caractère précomposé, soit avec la lettre « e » suivie de l'accent aigu combinant. Le même glyphe s'affiche dans les deux cas.

On suppose qu'en UTF-8 le « é » précomposé occupe 2 octets, que « e » occupe 1 octet et que l'accent combinant occupe 2 octets.

Un mot de 10 lettres contient 3 fois la lettre « é » et 7 lettres ASCII. Quelle est sa taille en octets si les « é » sont décomposés ?

Indice 1

Combien d'octets pour un « é » décomposé : lettre plus accent ?

Indice 2

Les 7 autres lettres sont en ASCII.

Voir la correction pas à pas
  1. Rappel : le « é » se décrit soit avec son propre numéro, soit avec le numéro du « e » suivi de celui de l'accent 3. Il s'agit de deux caractères Unicode qui forment un seul glyphe 3.

  2. Un « é » décomposé occupe 1+2=31 + 2 = 3 octets.

  3. Les 3 « é » : 3×3=93 \times 3 = 9 octets. Les 7 lettres ASCII : 7 octets.

  4. Taille totale : 7+9=167 + 9 = 16 octets.

  5. Pour comparer, en précomposé : 7+3×2=137 + 3 \times 2 = 13 octets.

Le mot occupe 16 octets en forme décomposée contre 13 en forme précomposée, alors qu'il s'affiche de la même façon. Deux chaînes d'aspect identique peuvent donc avoir des longueurs différentes, ce qui complique les comparaisons de textes.

Exercice 8 Un décalage de lettres avec retour au début

★★★Environ 15 min

Tu écris un programme qui décale chaque lettre majuscule de 3 rangs dans l'alphabet (chiffrement de César). On donne : le code de A est 65 ; l'alphabet compte 26 lettres ; la lettre X est la 24e lettre, donc à la position 23 si on compte à partir de 0 pour A.

  1. Écris la formule du code de la lettre décalée en fonction du code c d'une majuscule.
  2. Quel est le code de la lettre obtenue en décalant X de 3 rangs ? Quelle est cette lettre ?
Indice 1

Le décalage doit revenir au début de l'alphabet après Z : quelle opération donne cela ?

Indice 2

Soustrais 65 pour obtenir la position, décale, applique la bonne opération, puis rajoute 65.

Voir la correction pas à pas
  1. Position de la lettre : c−65c - 65 (0 pour A, 25 pour Z).

  2. Décalage de 3 avec retour au début : (c−65+3) mod 26(c - 65 + 3) \bmod 26.

  3. On repasse en code : formule 65 + (c - 65 + 3) % 26.

  4. Pour X : position 23, donc (23+3) mod 26=26 mod 26=0(23 + 3) \bmod 26 = 26 \bmod 26 = 0.

  5. Code obtenu : 65+0=6565 + 0 = 65, c'est-à-dire la lettre A.

Décaler X de 3 rangs donne la lettre A, de code 65 : sans le modulo 26, on aurait obtenu le code 91, qui n'est pas une lettre majuscule. Cette logique repose sur la continuité des codes des lettres.

Exercice 9 Pourquoi des caractères parasites ?

★★☆Environ 10 min

Camille enregistre un fichier texte en UTF-8 contenant le mot « été ». Elle l'ouvre avec un logiciel ancien qui suppose que le fichier est en Latin-1 (un octet par caractère). Le texte s'affiche avec des caractères inattendus, plus nombreux que prévu.

On admet qu'en UTF-8 chaque « é » occupe 2 octets.

  1. Combien de caractères le logiciel affiche-t-il pour ce mot ?
  2. Explique l'origine du problème et propose une solution.
Indice 1

Latin-1 associe un caractère à chaque octet lu.

Indice 2

Que doit indiquer l'auteur du fichier pour que le lecteur choisisse le bon décodage ?

Voir la correction pas à pas
  1. Le mot est constitué de 3 caractères : é, t, é. En UTF-8, les deux « é » occupent 2 octets chacun et le « t » ASCII 1 octet 3, soit 5 octets.

  2. Le logiciel lit en Latin-1 : un octet donne un caractère, donc il affiche 5 caractères au lieu de 3.

  3. Les 2 octets de chaque « é » sont interprétés séparément comme deux caractères Latin-1 sans rapport avec le « é » voulu.

  4. Cause : avec les encodages régionaux, il faut indiquer l'encodage en dehors du flot de caractères 2. Sans cette information, le lecteur devine mal.

  5. Solution : indiquer l'encodage UTF-8 à l'ouverture, ou enregistrer le fichier dans l'encodage attendu par le logiciel. Les caractères ASCII, eux, s'affichent normalement car leur codage est identique 3.

La même suite d'octets, décodée avec un autre encodage, donne un autre texte. Le « t » s'affiche correctement parce que l'ASCII est commun aux deux encodages ; seuls les caractères accentués posent problème.

Les questions qu'on se pose

Comment savoir si je dois compter en bits ou en octets dans un exercice ?

Lis l'unité demandée. Un octet vaut 8 bits. Si l'énoncé donne un nombre de bits par caractère (7 pour l'ASCII 2, 8 pour Latin-1 3), calcule d'abord en bits puis convertis. Pour UTF-8, raisonne directement en octets : 1 à 4 octets par caractère 1.

Pourquoi l'UTF-8 est-il si utilisé alors que sa longueur est variable ?

Il reste compatible avec l'ASCII : les 128 caractères ASCII y gardent le même codage sur un octet 3. Sur Internet, UTF-8 et ASCII sont les deux encodages les plus populaires depuis 2010 2. Son défaut principal est cette longueur variable, qui rend le traitement des chaînes moins simple 3.

Que dois-je savoir par cœur pour le contrôle ?

Retiens les ordres de grandeur : ASCII sur 7 bits (128 caractères), Latin-1 sur 8 bits (256 caractères), Unicode avec des points de code jusqu'à U+10FFFF, et UTF-8 sur 1 à 4 octets 1 2. Le reste (table des codes) est en général fourni, mais sache refaire les conversions entre base 2, 10 et 16.

Sources

  1. Encodage des caractères et Unicode, Université Grenoble Alpes. Consulté le 6 novembre 2026.
  2. Codage des caractères, Wikipédia. Consulté le 6 novembre 2026.
  3. Unicode, Wikipédia. Consulté le 6 novembre 2026.

Les numéros dans le texte renvoient à ces sources. Une source qui ne dit pas ce qu'on lui fait dire ? Signale-le.

Signaler une erreur sur cette page

Je suis en…

Primaire

  • CP Bientôt
  • CE1 Bientôt
  • CE2 Bientôt
  • CM1 Bientôt
  • CM2 Bientôt

Collège

Lycée

Supérieur

  • BTS Bientôt
  • BUT Bientôt
  • Licence Bientôt
  • Prépas Bientôt

Sur cette page