publié le jeu. 23 novembre 2017

Pour représenter un texte, il est nécessaire d'afficher les caractères qui le composent. Le choix du codage des caractères dépend fortement des langues, ainsi la langue française comporte de nombreuses lettres accentuées non utilisées en anglais par exemple:

é, è, ê, ç, à...

Le premier codage à avoir été utilisé est le codage ascii(American Standard Code for Information Interchange), qui ne prévoit pas l'utilisation de lettres accentuées et qui peut vous ammener parfois à lire des textes à la limite du compréhensible sur vos écrans.

En voici un exemple

Le codage ascii

Le codage ASCII est une norme de codage de caractères en informatique ancienne et connue pour son influence incontournable sur les codages de caractères qui lui ont succédé. Elle était la plus largement compatible pour ce qui est des caractères latins non accentués. ASCII contient les caractères nécessaires pour écrire en anglais.

L'ASCII définit seulement 128 caractères numérotés de 0 à 127 et codés en binaire de 0000000 à 1111111. Sept bits suffisent donc pour représenter un caractère codé en ASCII. Toutefois, les ordinateurs travaillant presque tous sur un multiple de huit bits (multiple d'un octet) depuis les années 1970, chaque caractère d'un texte en ASCII est souvent stocké dans un octet dont le 8e bit est 0. Source Wikipedia

Table ascii

ascii-table

Certains des caractères présents ne peuvent pas être affichés(repérés par un fond bleu), ce sont des caractères de contrôle. Vous pouvez trouver leur signification sur cette page.

Pour lire le tableau, on associe au carctère le code binaire suivant: n°deligne_n°decolonne. Par exemple, le caractère a est situé dans la case correspondant à la 7e ligne, 2e colonne. Sa représentation binaire est:110_0001 soit sous la forme d'un octet: 01100001. Ce qui correspond au caractère 97 en décimal.

Pour faciliter la lecture des codes ascii par un huamin, il est plus commode de coder les numéros de ligne et de colonne en hexadécimal, et la lettre 'a' aura alors pour code 61 en hexadécimal.

L'encodage ascii étendu

La nécessité de représenter des textes comportant des caractères non présents dans la table ASCII tels ceux de l'alphabet latin utilisés en français comme le 'à', le 'é' ou le 'ç' impose l'utilisation d'un autre codage que l'ASCII.

Plusieurs propositions de codage coexistent.

Afin de faciliter les choses, ces propositions sont des extensions du codage ASCII :

Mais les 8 bits de l'octet vont être utilisés. Cela permet de coder \(2^8\) = 256 caractères, soit 128 caractères supplémentaires.

L'ISO, organisation internationale de normalisation, propose de son côté plusieurs variantes de codages adaptées aux différentes langues. La plus utilisée concerne les langues européennes occidentales. Il s'agit de l'ISO-8859-1, aussi nommé ISO-Latin1.Source université de Lille

Mais il existe d'autres variantes adaptées à d'autres langues:

Table ISO-latin-1Source Wikipedia

ISO/CEI 8859-1
  x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF
0x positions inutilisées
1x
2x SP  ! " # $  % & ' ( ) * + , - . /
3x 0 1 2 3 4 5 6 7 8 9  :  ; < = >  ?
4x @ A B C D E F G H I J K L M N O
5x P Q R S T U V W X Y Z [ \ ] ^ _
6x ` a b c d e f g h i j k l m n o
7x p q r s t u v w x y z { | } ~
8x positions inutilisées
9x
Ax NBSP ¡ ¢ £ ¤ ¥ ¦ § ¨ © ª «  ¬ - ® ¯
Bx ° ± ² ³ ´ µ · ¸ ¹ º  » ¼ ½ ¾ ¿
Cx À Á Â Ã Ä Å Æ Ç È É Ê Ë Ì Í Î Ï
Dx Ð Ñ Ò Ó Ô Õ Ö × Ø Ù Ú Û Ü Ý Þ ß
Ex à á â ã ä å æ ç è é ê ë ì í î ï
Fx ð ñ ò ó ô õ ö ÷ ø ù ú û ü ý þ ÿ

On peut constater que cette table ne prend pas en charge le caractère , ainsi une nouvelle norme mieux adaptée au français a été introduite l'ISO 8859-15 pour prendre en charge de l'e dans l'o, noté noté œ en minuscule et Œ en capitale.

Cette norme est cependant peu utilisée et on lui préfère maintenant le standard Unicode afin de dépasser les limites de l'encodage latin-1.

L'encodage unicode utf-8

L'encodage utf-8 est un encodage en élaboration qui permet d'encoder tous les caractères de toutes les langues, il est actuellement en train de s'imposer face aux antres encodages en raison de son universalité.

UnicodeGrow2b.png
"UnicodeGrow2b" by Krauss - Own work. Licensed under CC BY-SA 4.0 via Wikimedia Commons.

À l'évidence, 256 caractères ne suffisant pas pour représenter les lettres de tous les alphabets utilisés (pensons au russe, à l'hébreu, etc.), un nouveau standard a été introduit : Unicode. La table Unicode comporte la définition de près de cent cinquante mille caractères.

Le codage de cette table est multiple. Le codage le plus couramment utilisé se nomme UTF-8. Son principe est le suivant : une première série de caractères sont codés sur un octet. D'autres caractères sont codés sur deux octets, le premier octet débute par '110' pour l'indiquer, l'octet suivant débute par '10'. De même des codages sur 3 ou 4 octets sont utilisés pour d'autres caractères. (Cette rapide introduction à UTF-8 est volontairement simplifiée.)

Les 128 premiers caractères de la table UTF-8 sont compatibles avec le codage ASCII. Ainsi le codage UTF-8 d'un texte ne comportant que des caractères présents dans la table ASCII sera le même que le codage ASCII de ce texte.

Ce ne sera pas vrai pour un texte ISO-Latin-1.

Il importe donc, quand on veut décoder un texte, de savoir quel est le codage utilisé sous peine de décoder improprement les caractères. Source Univesrité de Lille

La table complète des caractères unicode peut être consultée sur le site unicode-table.com

Par exemple si on cherche dans cette table la lettre é, on trouve le code:U+00E9 appelé point code, en binaire cela correspond au nombre décimal 233, et au nombre binaire 11101001. Ce nombre binaire sera représenté en utf-8 sur deux octets sous la forme: 110x-xxxx_10xx-xxxx. Les chiffres binaires du point de code sont rangés de droite à gauche aux positions 'x' de ce schéma.

On obtient donc 1100_0011 1010_1001 pour le caractère é.

Ce qui représente en hexadécimal:C3A9

L'encodage des caractères en python

En python 3, tous les fichiers doivent être codés en utf-8, et les chaines de caractères string sont encodées en utf-8, contrairement aux bytes qui ne doivent contenir que des caractères ascii.

L'encodage des caractères en html

Pour obtenir un affichage correct des caractères spéciaux en html, il est conseillé de déclarer l'encodage utf-8 dans le fichier d'en-tête(<head>) de la page html en utilisant la balise <meta>.

Voici la structure type d'un fichier html5.

<!DOCTYPE html>
<html>

    <head>
        <meta charset="UTF-8">
        <title>Titre du document</title>
    </head>

    <body>
        Contenu du document, avec d'éventuels accents!!!
        et caractères étranges , de toutes les langues...
        ...ظɶ
        ...ऴ,ඛ
        ...ტ,ላ,Ꮹ,ᜨ...
    </body>

</html>

Il est également possible d'afficher des caractères par leur code html, ces codes sont également présents sur la page unicode-table.com.

Par exemple le caractère À U+00C0 peut être codé en html par &#192;, ou encore en notation hexadécimale: &#xc0;