Le mot "Adloun" occupe combien d'octets en ASCII, en latin-1, en UTF-8
Exercice de TD · niveau 2 · NSI (première), chapitre 2 — Flottants, booléens et textes · Caractères, encodages et accidents de lecture
É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.
Les autres exercices de ce chapitre Le cours du chapitre
Un blocage sur cet exercice ? Le tuteur d'Adloun guide par questions, sans donner la réponse.