Adloun

NSI (première) · Chapitre 2 · Exercice de TD

Le mot "Adloun" occupe combien d'octets en ASCII, en latin-1, en UTF-8

Flottants, booléens et textes · Caractères, encodages et accidents de lecture · niveau 2

Énoncé

Le mot "Adloun" occupe combien d'octets en ASCII, en latin-1, en UTF-8 ? Et le mot "élève" ? Vérifier avec len(...encode(...)).

Corrigé

"Adloun" : six caractères, tous dans les premiers codes. Il occupe donc 6 octets dans les trois encodages. C'est la propriété qui a fait le succès d'UTF-8 : sur du texte purement anglais, il ne coûte rien de plus qu'ASCII.

"élève" : cinq caractères, dont deux accentués.

  • ASCII : impossible. Les codes de é et è n'existent pas dans une table de entrées ; Python lève UnicodeEncodeError.
  • latin-1 : octet par caractère, donc 5 octets.
  • UTF-8 : les trois lettres non accentuées coûtent octet, les deux accentuées octets chacune, soit 7 octets.

>>> len("Adloun"), len("Adloun".encode("utf-8"))
(6, 6)
>>> len("élève")
5
>>> len("élève".encode("latin-1"))
5
>>> len("élève".encode("utf-8"))
7
>>> "élève".encode("utf-8")
b'\xc3\xa9l\xc3\xa8ve'
>>> "élève".encode("ascii")
UnicodeEncodeError: 'ascii' codec can't encode character
'\xe9' in position 0: ordinal not in range(128)

Erreur attendue : confondre len(texte), qui compte des caractères, et len(texte.encode(e)), qui compte des octets. Ils coïncident en latin-1 et sur l'ASCII pur ; ils divergent dès qu'un caractère non anglais apparaît en UTF-8. Un programme qui dimensionne un tampon avec le premier alors qu'il écrit le second déborde.

100 % gratuit

Essaie le suivant avec le tuteur

Faire l'exercice suivant avec le tuteur

Sans compte : le cours, 2 minutes de podcast et de vidéo et un exercice avec le tuteur. Pour tout le reste : inscription gratuite en 30 secondes, sans carte bancaire.

Le cours du chapitre · Tous les exercices du chapitre

Exercice suivant avec le tuteur →