Codage des caractères



Nous savons qu'un ordinateur est uniquement capable de traiter des données binaires, comment sont donc codés les textes dans un ordinateur ? Ou plus précisément, comment sont codés les caractères dans un ordinateur ?

ASCII

Avant 1960 de nombreux systèmes de codage de caractères existaient, ils étaient souvent incompatibles entre eux. En 1960, l'organisation internationale de normalisation (ISO) décide de mettre un peu d'ordre dans ce bazar en créant la norme ASCII (American Standard Code for Information Interchange). À chaque caractère est associé un nombre binaire sur 8 bits (1 octet). En faite, seuls 7 bits sont utilisés pour coder un caractère, le 8e bit n'est pas utilisé pour le codage des caractères. Avec 7 bits il est possible de coder jusqu'à 128 caractères ce qui est largement suffisant pour un texte écrit en langue anglaise (pas d'accents et autres lettres particulières).

Comme vous pouvez le constater dans le tableau ci-dessus, au "A" majuscule correspond le code binaire (1000001)2 ((65)10 ou (41)16)

Quel est le code binaire du "a" minuscule en ASCII?


Quelques soucis avec l'encodage Ascii :

Test 1 (ASCII)

Test 2 (ISO-8859-1 ou Latin1)

Test 3 (UTF-8 ou Unicode)


Repérer les différence entre les codes sources.


ISO-8859-1

La norme ASCII convient bien à la langue anglaise, mais pose des problèmes dans d'autres langues, par exemple le français. En effet l'ASCII ne prévoit pas d'encoder les lettres accentuées. C'est pour répondre à ce problème qu'est née la norme ISO-8859-1. Cette norme reprend les mêmes principes que l'ASCII, mais les nombres binaires associés à chaque caractère sont codés sur 8 bits, ce qui permet d'encoder jusqu'à 256 caractères. Cette norme va être principalement utilisée dans les pays européens puisqu'elle permet d'encoder les caractères utilisés dans les principales langues européennes (la norme ISO-8859-1 est aussi appelée "latin1" car elle permet d'encoder les caractères de l'alphabet dit "latin")

Problème, il existe beaucoup d'autres langues dans le monde qui n'utilisent pas l'alphabet dit "latin", par exemple le chinois ou le japonnais ! D'autres normes ont donc dû voir le jour, par exemple la norme "GB2312" pour le chinois simplifié ou encore la norme "JIS_X_0208" pour le japonais.

Cette multiplication des normes a très rapidement posé problème. Imaginons un français qui parle le japonais. Son traitement de texte est configuré pour reconnaitre les caractères de l'alphabet "latin" (norme ISO-8859-1). Un ami japonais lui envoie un fichier texte écrit en japonais. Le français devra modifier la configuration de son traitement afin que ce dernier puisse afficher correctement l'alphabet japonais. S'il n'effectue pas ce changement de configuration, il verra s'afficher des caractères ésotériques.

Unicode

Pour éviter ce genre de problème, en 1991 une nouvelle norme a vu le jour : Unicode

Unicode a pour ambition de rassembler tous les caractères existant afin qu'une personne utilisant Unicode puisse, sans changer la configuration de son traitement de texte, à la fois lire des textes en français ou en japonais

Unicode est uniquement une table qui regroupe tous les caractères existant au monde, il ne s'occupe pas de la façon dont les caractères sont codés dans la machine. Unicode accepte plusieurs systèmes de codage : UTF-8, UTF-16, UTF-32. Le plus utilisé, notamment sur le Web, est UTF-8.

Pour encoder les caractères Unicode, UTF-8 utilise un nombre variable d'octets : les caractères "classiques" (les plus couramment utilisés) sont codés sur un octet, alors que des caractères "moins classiques" sont codés sur un nombre d'octets plus important (jusqu'à 4 octets). Un des avantages d'UTF-8 c'est qu'il est totalement compatible avec la norme ASCII : Les caractères Unicode codés avec UTF-8 ont exactement le même code que les mêmes caractères en ASCII.

Python parle ASCII ...

  1. Tester le code ci-dessous :
  2. >>> ord('A')
    >>> chr(65)
    >>> bin(65)
    
  3. Coder votre prénom en binaire
  4. Décoder ce texte.
  5. 01001100 01100101 00100000 01100010 
    01101001 01101110 01100001 01101001
    01110010 01100101 00101100 00100000 
    01100011 00100111 01100101 01110011
    01110100 00100000 01101001 01101110 
    01101000 01110101 01101101 01100001
    01101001 01101110 00101110
    
  1. La lettre 'A' est codée en binaire sur un octet par :

TP2_NSI

- Quel est la taille du fichier test.txt ?
- Justifier le codage binaire entouré :







Pour les plus rapide ... MICRO PROJET
A l'aide de python, décoder le message suivant :

0100100101101100001000000111100100100000011000010010000000110001
0011000000100000011101000111100101110000011001010111001100100000
0110010001100101001000000111000001100101011100100111001101101111
0110111001101110011001010111001100101100001000000110001101100101
0111010101111000001000000111000101110101011010010010000001100011
0110111101101101011100000111001001100101011011100110111001100101
0110111001110100001000000110110001100101001000000110001001101001
0110111001100001011010010111001001100101001000000110010101110100
0010000001101100011001010111001100100000011000010111010101110100
01110010011001010111001100101110

NON FAIT




Lire l' article

NON LU