Les caractères et les textes

Charset et Encoding

En télécommunications et en informatique, un jeu de caractères codés (charset encoding en anglais) est un code qui associe un jeu de caractères d’un alphabet avec une représentation numérique pour chaque caractère de ce jeu.

  • Le jeu de caractère est nommé charset (character set) .
  • Le code qui relie le chaque caractère à un nombre est nommé encoding.

Par exemple, le code Morse (qui associe l’alphabet latin à une série de pressions longues et de pressions courtes sur le manipulateur morse du télégraphe) est un des premier jeux de caractères codés.

Le code ASCII [askiː] s’est imposé au début de l’ère informatique pour coder 128 caractères (lettres, chiffres et autres symboles).

 

Activité : taille d'un texte
  1. Quelle est la taille (en octets) de la phrase : Enfin ! Je viens de comprendre ce qui s’est produit. (attention, il faut compter les espaces, et signes de ponctuation…) ?
  2. Vérifier en tapant cette phrase avec un éditeur de texte quelconque (bloc-notes de Windows, …). Il suffit d’écrire le texte, puis de l’enregistrer en tant que « texte brut » (le plus souvent avec une extension .txt) et ensuite de vérifier la taille en octets du fichier obtenu (ce qui peut se faire en cliquant d’abord avec le bouton droit sur l’icône du fichier puis sur « Propriétés »).
  3. Écrire la même chose dans un logiciel de traitement de texte (comme LibreOffice Writer ou Microsoft Word). Expliquer pourquoi la taille du fichier n’est pas la même.
Activité : table ascii
  1. À l’aide de la table ASCII, coder en binaire la phrase suivante : L’an qui vient !.
  2. Voici maintenant une exclamation codée en binaire : 01000010 01110010 01100001 01110110 01101111 00100001. Retrouver cette exclamation !
  3. Peut-on coder en binaire la phrase Un âne est-il passé par là ? à l’aide de la table ASCII ? (Justifier la réponse)

 

Quand la table ASCII ne suffit plus

Pour coder un texte dans un alphabet plus complexe et pour échanger des informations sur l’Internet, il faut impérativement disposer d’un charset plus complet.

Par exemple, en français les caractères é, è, ç, à, ù, ô, æ, œ, sont fréquemment utilisés alors qu’ils ne figurent pas dans la table ASCII.

Il va donc falloir étendre la table ASCII pour pouvoir coder les nouveaux caractères. Les mémoires devenant plus fiables et, de nouvelles méthodes plus sûres que le contrôle de parité ayant été inventées, le 8ième bit a pu être utilisé pour coder plus de caractères.

Activité
  • Combien le fait d’avoir 8 bits amène-t-il de nouvelles possibilités ?

 

On élimine ainsi l’inconvénient très gênant de ne coder que les lettres non accentuées, ce qui peut suffire en anglais, mais pas dans les autres langues (comme le français et l’espagnol par exemple). On a pu aussi rajouter des caractères typographiques utiles comme des tirets de diverses tailles et sortes.

De la difficulté de convenir d’une norme

Le fait d’utiliser un bit supplémentaire a bien entendu ouvert des possibilités mais malheureusement tous les caractères ne pouvaient être pris en charge. La norme ISO 8859–1 appelée aussi Latin-1 ou Europe occidentale est la première partie d’une norme plus complète appelée ISO 8859 (qui comprend 16 parties) et qui permet de coder tous les caractères des langues européennes. Cette norme ISO 8859–1 permet de coder 191 caractères de l’alphabet latin qui avaient à l’époque été jugés essentiels dans l’écriture, mais omet quelques caractères fort utiles (ainsi, la ligature œ n’y figure pas). Dans les pays occidentaux, cette norme est utilisée par de nombreux systèmes d’exploitation, dont Linux et Windows. Elle a donné lieu à quelques extensions et adaptations, dont Windows-1252 (appelée ANSI) et ISO 8859-15 (qui prend en compte le symbole € créé après la norme ISO 8859-1).

C’est source de grande confusion pour les développeurs de programmes informatiques car un même caractère peut être codé différemment suivant la norme utilisée.

Voici deux tableaux présentant côte à côte ces deux encodages :

ISO 8859-15  Windows-1252

À première vue, on a les mêmes caractères aux mêmes places; un regard plus attentif montre l’affectation de caractères supplémentaires sur des zones inutilisées dans ISO 8859-15. Un examen encore plus attentif montre enfin que les deux tables sont tout à fait incompatibles.

 

Activité : utilisation d'un logiciel
Voici le code binaire d’un texte :

01000010 01110010 01100001 01110110 01101111 00101100 00100000 01110100 01110101 00100000 01100001 01110011 00100000 01110000 01110010 01100101 01110011 01110001 01110101 01100101 00100000 01110100 01101111 01110101 01110100 00100000 01110100 01110010 01101111 01110101 01110110 11101001 00101110 00101110 00101110

  1. À l’aide du convertisseur en ligne, retrouver le texte contenu dans le code.
  2. Ce logiciel est-il compatible avec la norme ISO 8859-1, ISO 8859-15 ou Windows 1252 ? (justifier la réponse)
  3. Trouver une astuce pour savoir laquelle des trois est utilisée !

 

Quand le net s’affole…

Nous avons tous un jour reçu un courriel bizarre ou lu une page web telle que celle-ci :

Prenons l’exemple typique de la lumière émise par un phare maritime : elle est d’abord indivisible, son coût de production étant alors indépendant du nombre d’utilisateurs ; elle possède une propriété de non-rivalité (elle ne se détruit pas dans l’usage et peut donc être adoptée par un nombre illimité d’utilisateurs) ; elle est également non excluable car il est impossible d’exclure de l’usage un utilisateur, même si ce dernier ne contribue pas à son financement.

Bien que ce soit de moins en moins fréquent, on trouve parfois des phrases dans lesquelles certains caractères sont remplacés par d’autres (connus sous le nom de mojibakes) qui n’ont rien à voir et qui empêchent la lecture et la compréhension du texte. Il s’agit ici d’un problème d’encodage et de décodage. La personne qui écrit le texte utilise une norme différente de celle utilisée par celui qui le lit ! Lorsque c’est un courriel on a la plupart du temps affaire à un spam venant de l’étranger, ce n’est pas sans raison…

 

Et l’Unicode vint…

La globalisation des échanges culturels et économiques a mis l’accent sur le fait que les langues européennes coexistent avec de nombreuses autres langues aux alphabets spécifiques voire sans alphabet. La généralisation de l’utilisation d’Internet dans le monde a ainsi nécessité une prise en compte d’un nombre beaucoup plus important de caractères (à titre d’exemple, le mandarin possède plus de 5000 caractères !). Une autre motivation pour cette évolution résidait dans les possibles confusions dues au trop faible nombre de caractères pris en compte ; ainsi, les symboles monétaires des différents pays n’étaient pas tous représentés dans le système ISO 8859-1, de sorte que les ordres de paiement internationaux transmis par courrier électronique risquaient d’être mal compris.

La norme Unicode a donc été créée pour permettre le codage de textes écrits quel que soit le système d’écriture utilisé.

On attribue à chaque caractère un nom, un numéro (appelé point de code) et un bref descriptif qui seront les mêmes quelle que soit la plate-forme informatique ou le logiciel utilisés.

Logo de l’Unicode

Un consortium composé d’informaticiens, de chercheurs, de linguistes et de personnalités représentant les États ainsi que les entreprises s’occupe donc d’unifier toutes les pratiques en un seul et même système : l’Unicode.

L’Unicode est une table de correspondance Caractère-Code (Charset), et l’UTF-8 est l’encodage correspondant (Encoding) le plus répandu.

Maintenant, par défaut, les navigateurs Internet utilisent le codage UTF-8 et les concepteurs de sites pensent de plus en plus à créer leurs pages web en prenant en compte cette même norme ; c’est pourquoi il y a de moins en moins de problèmes de compatibilité.

Activité : codage et Internet
  • Ouvrir un navigateur Internet (Firefox, …). Dans la barre d’outils du premier on peut voir à « Affichage », « Encodage des caractères » que c’est l’UTF-8 qui est sélectionné par défaut. Changeons cela et sélectionnons Europe Centrale (Windows).

Les petits caractères désagréables apparaissent.

  • Que s’est-il passé ?

En allant dans « Outils », « Informations sur la page », on voit que cette page est encodée en UTF-8. Lorsque le lecteur est lui aussi en UTF-8 tout va bien. Dès qu’on change le paramètre du lecteur (ici, le navigateur), des incompatibilités apparaissent. En utilisant le navigateur web, et en allant dans « Affichage », « Source », on obtient ceci :

On peut lire l’entête de la page html visitée. Où se situe l’information relative à l’encodage ?

On peut aussi dans « Affichage », « Codage », sélectionner Grec (ISO) et se rendre compte en lisant le texte, que le « à » a été remplacé par un « L » à l’envers dit Gamma.

Activité : encodage dans un système d'exploitationSystème d'exploitation En informatique, un système d'exploitation (souvent appelé OS - de l'anglais Operating System) est un ensemble de programmes qui dirige l'utilisation des ressources d'un ordinateur par des logiciels applicatifs. source : https://fr.wikipedia.org/wiki/Système_d'exploitation

Sous Windows aller dans « Démarrer », « Exécuter », taper « charmap ». Cocher « Affichage avancé », sélectionner « Windows : Occidental » (c’est à peu de choses près l’ISO 8859-1) dans « Jeu de caractères » regarder le nombre de caractères proposés, puis sélectionner « Unicode ». Il y a maintenant un très grand nombre de caractères disponibles, de nombreuses langues sont représentées, ainsi qu’une quantité d’autres symboles ! Sauriez-vous repérer quels symboles vous connaissez (typographiques, techniques, décoratifs) ?

Sous Linux on pourra utiliser « gucharmap », et pour OSX (Apple) il faut chercher la « palette de caractères ».

 

L’encodage UTF-8

Règles d’encodage

L’encodage UTF-8 utilise 1, 2, 3 ou 4 octets en respectant certaines règles :

  • Un texte en ASCII de base (appelé aussi US-ASCII) est codé de manière identique en UTF-8.
    On utilise un octet commençant par un bit 0 à gauche (bit de poids fort).

    Exemples de codage UTF-8

    Type Caractère Point de code
    (hexadécimal)
    Valeur scalaire Codage UTF-8
    décimal binaire binaire hexadécimal
    Texte A U+0041 65 1000001 01000001 41
    é U+00E9 233 00011 101001 11000011 10101001 C3 A9

 

  • Les octets ne sont pas remplis entièrement.
    Les bits de poids fort du premier octet forment une suite de bits indiquant le nombre d’octets utilisés pour coder le caractère.
    Les octets suivants commencent tous par le bloc binaire 10.
    Définition du nombre d’octets utilisés

    Caractères codés Représentation binaire UTF-8 Signification
    U+0000 à U+007F 0xxxxxxx 1 octet, codant 7 bits
    U+0080 à U+07FF 110xxxxx 10xxxxxx 2 octets, codant 11 bits
    U+0800 à U+FFFF 1110xxxx 10xxxxxx 10xxxxxx 3 octets, codant 16 bits
    U+10000 à U+FFFFF 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx 4 octets, codant 21 bits

 

  • Dans la norme ISO 8859-1 le « é » est codé sur 1 octet : 1110 1001 ,
    En UTF-8 on le code sur deux octets en respectant les précisions apportées dans le tableau ci-dessus. Les bits imposés sont 110 pour le 1er octet et 10 pour le deuxième, le code du « é » est écrit en commençant par la droite et l’octet de gauche est rempli par des zéros (en italique). Voilà ce que l’on obtient : 11000011 10101001 .
    On pourra remarquer que le codage ISO s’inscrit bien dans le codage UTF-8.
Activité : nombre de caractères UTF-8

Combien de caractères Unicode, encodés en UTF-8, la séquence d’octets-ci dessous (en écriture décimale) représente-elle ?

  • 107 110 045
  • 234 133 188
  • 226 190 133
  • 212 184 88 120
Correction
  • 107 110 045 = 0110 1011  0110 1110   0010 1101
    3 caractères sur 1 octet chacun
  • 234 133 188 = 11101010   10000101   10111100
    1 caractère sur 3 octets

 

Activité : encodage en UTF-8

Le point de code du symbole a la valeur décimale 8364.

  1. Convertir cette valeur en binaire.
  2. Combien d’octets doit-on utiliser en UTF-8 pour coder ce nombre convenablement (les moitiés d’octet sont interdites) ?
  3. Donner le codage UTF-8 correspondant (en binaire).
Correction

(8364)10 = (0010 000010 101100)2 = (20AC)16

8364 est dans la plage U+0800 à U+FFFF, il faut donc 3 octets pour l’encoder en UTF-8, dans le format 1110xxxx 10xxxxxx 10xxxxxx

On « sépare » les bits ainsi : 0010 000010 101100
et on les insère à la place des xxx

11100010 10000010 10101100

Faire de même avec les caractères suivants :

  • É, de point de code 201,
  • Ω, de point de code 937,
  • 😩, de point de code 128553

Quelques remarques

  • Ce codage permet de coder tous les caractères de la norme Unicode.
  • Les caractères Unicode sont la plupart du temps représentés en hexadécimal.
    Par exemple : 1110 1001 qui est le code binaire du « é » en ISO 8859-1 devient E9h (l’indice signifie que l’on est en base 16) ce que l’on peut retrouver dans le tableau donné plus haut. Il faut noter que la notation en binaire est très peu utilisée sauf par les électroniciens et par ceux qui travaillent en langage machine.
  • Le système de codage UTF-8 permet d’encoder un même caractère de plusieurs manières. Ceci peut poser un problème de sécurité car un programme détectant certaines chaînes de caractères (pour contrer des injections dans les bases de données par exemple), s’il est mal écrit, pourrait alors accepter des séquences nuisibles. En 2001 un virus a ainsi attaqué des serveurs http du web.
    Par exemple, le symbole pourrait être codé sur 4 octets (forme super longue) de la manière suivante : 11110000 10000010 10000010 10101100. Si elle n’est pas rejetée ou remise sous forme standard ce codage ouvrira une brèche potentielle de sécurité par laquelle on pourra faire passer un virus.
Activité

Quel est le nombre maximal de caractères que l’on peut encoder grâce à l’UTF-8 lorsqu’on utilise les quatre octets ?

 

 

source : http://eduscol.education.fr/cid60671/ressources-isn.html

Vous aimerez aussi...

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

*

code