Outils pour utilisateurs

Outils du site


cours:informatique:fun_mooc:python3_uca_inria:210_codage_jeux_caracteres

Python: Encodage des caractères

Nous abordons ici les notions fondamentales de codage, décodage, jeux de caractères et Unicode. Commençons par regarder cette chaîne de caractères. Ici, vous voyez une succession de lettres et il va sans doute vous falloir quelques secondes pour être capable d'identifier que ces lettres forment des mots et que ces mots forment une phrase ; *la phrase: Je fais un mooc sur Python*. Votre cerveau a fait une opération que l'on appelle une opération de décodage ; il a pris une suite de lettres et il a été capable d'identifier les mots contenus dans cette liste. En informatique, nous n'avons pas de lettres mais nous manipulons des bits, des flux de bits. La question maintenant que l'on peut se poser est comment passer d'un flux de bits à la notion de lettre. En fait nous faisons, en informatique, la même opération, une opération de décodage.

Donc en quoi va consister ce décodage ? Le décodage va consister à définir une convention qui va dire: je découpe mon flux de bits en blocs d'une certaine taille. Dans notre exemple, nous allons prendre des blocs de 7 bits. C'est ce qu'on appelle d'ailleurs le codage ASCII. Découpons notre flux de bits en blocs de 7 bits, et regardons à quels nombres correspondent ces blocs de 7 bits. Ici, je fais une conversion en nombre décimal pour faciliter l'explication mais en informatique, dans un ordinateur, nous restons évidemment en binaire. Donc on voit que le premier bloc de 7 bits correspond au nombre 97, le deuxième, au code 108, et caetera, 105, 99 et 101. Maintenant que nous avons été capables de découper notre flux de bits en blocs et qu'on a obtenu un code correspondant à chaque bloc, il faut être capable de dire à quelle lettre correspond ce code. Nous utilisons pour ça ce qu'on appelle un jeu de caractères.

Un jeu de caractères est une table qui va donner un code qui correspond à un caractère. Nous allons prendre le jeu de caractères ASCII et dans le jeu de caractères ASCII, le code 97 va correspondre à la lettre a, le code 108 à la lettre l, et caetera. Une fois que vous avez ce caractère, un caractère est une notion abstraite, ça n'est pas encore un dessin que vous allez être capable d'afficher sur votre écran. Pour être capable d'afficher un dessin sur un écran, il faut utiliser pour cela une police de caractères. Ici, nous allons représenter les différentes lettres du prénom Alice avec la police lucida calligraphy gras. En fait, la police de caractères va définir un glyphe ; un glyphe, c'est en fait le dessin qui va correspondre à chaque caractère que l'on veut afficher. En résumé, lorsque l'on lit un contenu sur internet, ou alors sur un disque dur, nous avons un flux de bits et nous faisons donc des opérations de décodage pour obtenir les caractères et de manière inverse, lorsque l'on veut écrire quelque chose sur un disque dur, ou envoyer des données sur internet, nous allons faire une opération de codage pour retransformer nos lettres en flux de bits. Cependant, vous avez peut-être remarqué un problème avec notre codage ; nous avons utilisé un codage ASCII qui est sur 7 bits. Or, sur 7 bits, vous ne pouvez coder que 128 caractères différents. Nous voyons bien que nous ne pouvons pas coder tous les caractères du monde sur simplement 128 caractères. Nous devons donc utiliser des codages qu'on appelle des codages étendus. Il existe des codages ASCII étendus qui sont codés sur 8 bits. Sur 8 bits, vous pouvez coder 256 caractères mais encore une fois, 256 caractères, ça n'est pas suffisant pour coder tous les caractères du monde. Or, pendant des années, nous avons utilisé un grand nombre de codages ASCII étendus et d'autres types de codages qui ont permis par exemple de coder les caractères utilisés en français ou les caractères utilisés en allemand. Cependant, ces jeux de caractères sont incompatibles. Et c'est ce qui a produit pendant des années les erreurs que vous connaissez sans doute, vous recevez des mails avec des caractères bizarres ou alors vous allez sur internet et vous voyez des caractères bizarres s'afficher. C'est parce que simplement votre ordinateur ne contient pas le jeu de caractères qui a été utilisé pour encoder le texte publié par quelqu'un.

Pour résoudre ce problème, un projet a été démarré qui s'appelle le projet Unicode. L'objectif de ce projet est de coder l'intégralité des caractères du monde. Dans Unicode, dans le jeu de caractères Unicode, nous avons actuellement plus de 120 000 caractères qui ont été codés. Ainsi, en utilisant Unicode, vous avez la certitude de pouvoir coder et décoder l'intégralité des caractères du monde entier. Unicode utilise différents types de codage qui s'appellent UTF-8, UTF-16 et UTF-32. Sans rentrer dans le détail de ces encodages, sachez qu'ils participent à un compromis entre compacité du codage et vitesse de décodage. En pratique, nous utilisons très régulièrement le codage UTF-8 qui a la caractéristique importante d'être totalement compatible avec le codage ASCII standard. La bonne nouvelle avec Unicode, c'est que Python est totalement compatible avec le codage Unicode. La mauvaise nouvelle, c'est que vous devez contrôler votre encodage. En effet, je vous ai dit qu'il existait maintenant le jeu de caractères Unicode qui couvre tous les caractères du monde mais il existe encore de nombreux autres jeux de caractères utilisés dans d'anciens documents. Si vous ne contrôlez pas finement votre codage et décodage, vous ne pourrez pas dire à Python quel type de jeu de caractères utiliser. Donc la règle est simple: lorsque vous créez des documents ou lorsque vous lisez des documents, utilisez toujours UTF-8 sauf si on vous dit explicitement d'utiliser un autre jeu de caractères.

cours/informatique/fun_mooc/python3_uca_inria/210_codage_jeux_caracteres.txt · Dernière modification : 2021/05/17 08:25 de 92.154.112.189