Adloun

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

Trouver le point de code de "ç" et de "€"

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

Énoncé

Trouver le point de code de "ç" et de "€". Le second est-il représentable en latin-1 ? Que se passe-t-il si on essaie ?

Corrigé


>>> ord("ç"), hex(ord("ç"))
(231, '0xe7')
>>> ord("€"), hex(ord("€"))
(8364, '0x20ac')

Donc "ç" est U+00E7 et "€" est U+20AC.

ç : son point de code est inférieur à , il tient dans un octet — latin-1 le représente sans difficulté, par l'octet E7.

€ : son point de code dépasse . Latin-1 n'a que places, toutes attribuées en 1987 — le signe euro n'existait pas encore. La conversion échoue :


>>> "ç".encode("latin-1")
b'\xe7'
>>> "€".encode("latin-1")
UnicodeEncodeError: 'latin-1' codec can't encode character
'€' in position 0: ordinal not in range(256)
>>> "€".encode("utf-8")
b'\xe2\x82\xac'

Et c'est une bonne nouvelle. L'exception vaut infiniment mieux qu'un remplacement silencieux : elle signale que le texte ne peut pas être écrit dans cet encodage, au lieu de produire un fichier discrètement faux. C'est exactement la précondition annoncée par la docstring de convertir dans le cours.

Prolongement : le problème fut si gênant qu'une norme a été créée pour lui, ISO-8859-15 (« latin-9 »), qui sacrifie un caractère peu utilisé pour loger l'euro à la place A4. On vérifie : "€".encode("iso-8859-15") rend b'\xa4'. Un octet, une norme de plus, et un argument supplémentaire en faveur d'Unicode.

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 →