Allo le monde !

Sauter Menu de l'activité

Tous pour « un code pour tous »

Dans le but de résoudre les problèmes qui viennent d'être évoqués, un consortium est né. Il a pris le nom de consortium Unicode. Il a mis au point et fait évoluer un code universel appelé Unicode standard qui attribue à chaque caractère, à chaque symbole de n'importe quelle langue, un code unique.


Comment faire, selon vous, pour construire un tel code ? Comment s'y prendre et quelles sont les contraintes ?

Il n'y a pas de secret, un code sur huit bits ne suffit plus.

Il faut donc augmenter le nombre de bits ou du moins, l'augmenter pour une série de caractères qui ne pouvaient être codés jusque-là. C'est précisément le cas avec Unicode qui propose trois types de codage équivalents).

Le plus connu des trois est l'UTF-8, un codage de longueur variable. Cela signifie que tous les caractères ne sont pas nécessairement codés avec le même nombre d'octets. Unicode UTF-8 utilise de un à quatre octets selon les caractères à coder.


Comment un système peut-il reconnaître les caractères s'ils ne sont pas tous codés avec le même nombre d'octets ?

Ce sont les premiers bits des octets qui donnent une indication sur le nombre d'octets utilisés. Voici la règle. Elle peut paraître un peu compliquée, mais cela fonctionne sans ambiguïté.

  • Si l'octet rencontré commence par 0, c'est celui d'un caractère ASCII non accentué et il est codé sur un seul octet.
  • Un octet
  • S'il commence par 110 et que le suivant commence par 10, c'est un caractère accentué. Il est codé sur deux octets.
  • Deux octets
  • S'il commence par 1110, que le suivant et le troisième commencent par 10, c'est un caractère spécial (symbole monétaire, mathématique...). Il est codé sur trois octets.
  • Trois octets
  • S'il commence par 11110 et que les trois suivants commencent par 10, c'est un symbole plus complexe (un idéogramme, par exemple), codé sur quatre octets.
  • Quatre octets

Pour information, les deux autres codages sont UTF-16 qui code les caractères sur deux ou quatre octets et UTF-32, un codage de longueur fixe qui code tous les caractères sur quatre octets (32 bits).


Quels peuvent être, selon vous, les avantages et les inconvénients d'un codage de longueur fixe comme UTF-32 ?

Il est clair que l'inconvénient, c'est la taille des fichiers, puisqu'un nombre maximum d'octets est utilisé pour chaque caractère. L'avantage, c'est la simplicité du code. Tous les caractères sont codés de manière identique. L'identification des caractères prend moins de temps.

Il est évidemment possible de passer d'un type de codage à l'autre sans le moindre problème, mais peu nous importe comment.

Vous remarquerez que, pour éviter les problèmes de conversion des nombreux documents existants, il est souhaitable qu'un tel code respecte en grande partie ce qui existe déjà. C'est ce que fait l'Unicode UTF-8 qui correspond parfaitement au code ASCII (US) pour ce qui concerne les 128 premiers caractères, ceux qui ne sont pas accentués. Il n'y a donc pas de problèmes de compatibilité à ce niveau.


Observez le texte de l'illustration qui suit. C'est le même que celui qui précède cette question. Le texte original est codé en UTF-8. Celui qui suit a été converti en ISO-8859-1.

Quelle explication donnez-vous à ce que vous pouvez observer ?

Conversion UTF-8 en ISO latin-1

Comme il vient d'être dit, les caractères accentués sont codés sur deux octets en UTF-8. Il ne faut donc pas s'étonner de voir chacun de ceux-ci remplacés par deux caractères, puisqu'en ISO 8859-1, chaque octet correspond à un caractère.

Codages

D'autre part, on ne s'étonnera pas de constater que les caractères non accentués n'ont pas été altérés puisque UTF-8 est compatible avec l'US-ASCII.

Il est facile de faire de telles expériences avec un navigateur. Dans le menu qui gère l'affichage, une rubrique permet de choisir un autre code que le code original (cf. illustration ci-contre). Le menu indique que ce document est codé en UTF-8. Pour le voir décodé en ISO-8859-1, il suffit de choisir ce code dans la liste.


Dans l'autre sens, que se passe-t-il ?


Cherchez une page Web codée en ISO-8859-1 (le sous-menu vous permet de le savoir), changez-en le code. Quelles observations pouvez vous faire ?