Correction des exercices – UTF8

Question 1 :

  • Coder en UTF8 (binaire) le é codé 233.
    • 233 donne  11101001
      • Notes :
        • On peut l’obtenir avec 128 + 64 + 32 + 8 + 1,
        • ou par divisions successives par 2 :
          • 233 = 2 \times 116 + 1
          • 116 = 2 \times 58 + 0
          • 58 = 2 \times 29 + 0
          • 29 = 2 \times 14 + 1
          • 14 = 2 \times 7 + 0
          • 7 = 2 \times 3 + 1
          • 3 = 2 \times 1 + 1
          • 1 = 2 \times \boxed{0} + 1
          • On a zéro au quotient on s’arrête et on prend les restes successifs 1, 0, 0, 1, 0, 1, 1, 1 dans l’ordre inverse 😉
        • ou en python :
          >>> ord('é')
          233
          >>> bin(ord('é'))
          '0b11101001'
          >>> bin(233)
          '0b11101001'
          >>> hex(233) # au passage
          '0xe9'
          >>> bin(233) # reour au sujet
          '0b11101001'
          >>> bin(ord('é'))
          '0b11101001'
          >>> bin(ord('é'))[2:] # avec ça on a toujours le code
          '11101001'
    • Il faut les caser dans ces 2 octets 110xxxxx 10xxxxxx ,
    • donc 11000011 10101001.

Question 2 :

  • Combien de caractères différents peut on coder en UTF-8 ?

Alors là, j’ai souvent dit des âneries…
La bonne réponse est toute bête :
cm 2020-01-13 NSI utf8

  • 1 octet 0xxxxxxx , de l’ASCII, 7 bits avec deux possibilités, zéro ou un …
    \Rightarrow 2^{7} possibilités
  • 2 octets 110xxxxx 10xxxxxx , mais seulement 5 + 6 = 11 bits disponibles … \Rightarrow 2^{11} possibilités ?
    Non, car on ne mettra pas de code en dessous de huit bits !
    \Rightarrow 2^{11} - 2^{7} possibilités !
  • 3 octets 1110xxxx 10xxxxxx 10xxxxxx , mais seulement 4 + 6 + 6 = 16 bits disponibles … \Rightarrow 2^{16} possibilités ?
    Non plus, car on ne mettra pas de code en dessous de huit bits !
    \Rightarrow 2^{16} - 2^{11} possibilités !
  • 4 octets 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx , mais seulement 3 + 6 + 6 + 6 = 21 bits disponibles … \Rightarrow 2^{21} possibilités ?
    Vous avez compris
    \Rightarrow 2^{21} - 2^{16} possibilités !

Au final, un total de \left(2^{21} - 2^{16}\right) + \left(2^{16} - 2^{11}\right) + \left(2^{11} - 2^{7}\right) + 2^7.
Bref, c’est tout bête, 21 bits au max en UTF-8 et \boxed{2^{21}} possibilités !

En vrai… « Le standard Unicode décrit comment les caractères sont représentés par les points de code. Une valeur de point de code est un nombre entier compris entre 0 et 0x10FFFF (environ 1,1 million de valeurs, avec environ 110 000 valeurs attribuées à ce jour). » comme le dit la doc de python

cm 2020-04-02 ISN notes de Léa 1 utf8 et codes

Question 3 :

On a la séquence de huit octets suivante :

C3 A9 6C C3 A8 76 65 73

où chaque octet est représenté par deux chiffres hexadécimaux.

cm 2020-04-02 ISN notes de Léa 2 utf8 et codes

  • C’est en UTF-8, décoder la séquence.
    • En binaire,
      • le C donne 12 donc 1100,
      • le 3 donne… 3 donc 0011,
      • le A donne 10 donc 1010,
      • le 9 donne … 9 donc 1001,
      • etc
    • Donc les octets donnent :
      • C3 A9 donne 11000011 10101001 soit un code de 11101001 donc 233 donc é,
      • 6C donne 01101100 soit 64 + 32 + 8 + 4 = 108 donc l,
      • C3 A8 donne 11000011 10101000 soit un code de 11101000 donc 232 donc è,
      • 76 donne 01110110 soit 64 + 32 + 16 + 4 + 2 = 118 donc v,
      • 65 donne 01100101 soit 64 + 32 + 4 + 1 = 101 donc e,
      • 73 donne 01110011 soit 64 + 32 + 16 + 2 + 1 = 115 donc s.
    • La séquence donne la chaîne « élèves » !
  • N.B. : si c’était pas en UTF8 mais en latin-1, une norme en voie de disparition, ça afficherait … « élèves » ! On comprend mieux certains bugs d’affichage.

Maintenant que tout ceci est plus clair, plongeons-nous dans le TP « Afficheur utf-8 » !

N'hésitez-pas à poser une question, ou faire avancer le schmilblick

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l’aide de votre compte WordPress.com. Déconnexion /  Changer )

Photo Google

Vous commentez à l’aide de votre compte Google. Déconnexion /  Changer )

Image Twitter

Vous commentez à l’aide de votre compte Twitter. Déconnexion /  Changer )

Photo Facebook

Vous commentez à l’aide de votre compte Facebook. Déconnexion /  Changer )

Connexion à %s

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur la façon dont les données de vos commentaires sont traitées.