Martinique Domel : Comme par technologie…

Catégorie : Technique

Une fatigue certaine et décennale face aux entités HTML a récemment poussé le site de Quarante-Deux à passer en unicode.

Reprenons donc de manière plus moderne et à la fois plus traditionnelle : une fatigue certaine et décennale face aux entités HTML a récemment poussé le site de Quarante-Deux à passer en unicode.

À cette occasion, il a fallu gratter un peu la surface de ce qui n'était alors qu'un mot, et peut-être comprendre un certain nombre de discrètes évidences résumées ci-dessous. Ceux qui savent déjà ne sont pas obligés de lire.

Unicode n'a rien à voir avec l'informatique. Il s'agit en quelque sorte d'un alphabet, c'est-à-dire d'un ensemble de signes choisis et appris que l'on a à disposition pour tels ou tels travaux d'écriture. Chaque individu connaît son propre ensemble de signes, plus ou moins important selon son éducation, sa culture et ses besoins. Par exemple, les Anglo-Saxons se contentent en la matière de très très peu, quelques ponctuations et les lettres latines majuscules et minuscules (capitales et bas de casse), et cela suffit en général au bonheur d'écrire en anglais. Ceux qui désirent s'exprimer par écrit, dans l'une ou l'autre des langues européennes, ajoutent à ce bagage intellectuel un certain nombre de lettres latines accentuées, quelques ligatures et d'autres ponctuations. Les Grecs et les Slaves, qui ont toujours vu d'un mauvais œil l'Empire romain, ont leur propre jeu de caractères, l'alpha et l'oméga, le ia et le shcha. Ne parlons pas des Asiatiques, des Indiens ou des Arabes, qui font bande à part. Marco Polo, Christophe Colomb et Vasco de Gama, qui voyagent, ont un peu de tout dans leurs valises.

Passent alors les offices de normalisation qui, pour sacrifier au dieu ISO, veulent à leur habitude immobiliser un peu les choses en attribuant des noms. Pour l'anglais, ils choisissent 128 caractères qu'ils nomment US-ASCII. Pour l'Europe de l'ouest, ils en ajoutent 128 autres, et voici ISO-8859-1 (alias Latin 1). Pour le Français, qui veut son e dans l'o, et qui n'est manifestement pas à l'ouest de l'Europe, qu'à cela ne tienne, ils créent un autre paquet de 256 baptisé ISO 8859-15 (Latin 9). Pour Marco Polo, qui n'est guère raisonnable, ils mettent au point un grand fourre-tout romanogrécoindoslavoaraboasiatique répondant au doux nom d'unicode.

L'ordinateur n'est pas encore entré en lice, mais cela ne saurait tarder. Comment faire pour lui faire comprendre (enregistrer, afficher, transmettre, etc.) tel ou tel alphabet au sens large tel que défini ci-dessus ?

D'abord, effectuer un classement dans les caractères : les 128 ASCII seront rangés comme ça, de 0 à 127 ; les 256 ISO-8859 comme ça, pareil pour les 128 premiers et de 128 à 255 pour les suivants, les 65536 unicodes comme ça, pareil pour les 256 premiers et de 256 à 65535 pour les suivants.

Ensuite, faire correspondre simplement un nombre à ce numéro d'ordre, puisque les nombres, ça tombe bien, l'ordinateur ne connaît que ça, même si c'est toujours et exclusivement en binaire.

Le 'X', qui est rangé arbitrairement en position 88 (en quatre-vingt-neuvième position) sera donc représenté informatiquement par le nombre 88, soit 58 en hexadécimal (base 16), soit 0101 1000 en binaire.

Le 'é', qui est rangé tout aussi arbitrairement en position 233 (en deux cent trente-quatrième position) sera donc représenté informatiquement par le nombre 233, soit E9 en hexadécimal, soit 1110 1001 en binaire.

Le 'α', rangé en 945, sera donc représenté par 03 B1, soit 0000 0011 1011 0001.

Que vient faire l'hexadécimal là-dedans ? Absolument rien, mais il s'agit simplement d'une représentation un peu plus humaine que le binaire pour les nombres, plus agréable à l'œil et plus facile à saisir, d'autant plus pratique que pour passer, par exemple, de 03 B1 à 0000 0011 1011 0001, il suffit simplement de convertir en place 0 (0000), 3 (0011), B (1011) et 1 (0001) sans grand calcul supplémentaire, manipulation impossible en base dix (233).

Pour faire comprendre la Science-Fiction à l'ordinateur, 'S.-F.' pour faire court, il suffit donc de lui donner :

  • 83 pour le 'S'
  • 46 pour le point
  • 45 pour le trait d'union
  • 70 pour le 'F'
  • 46, à nouveau, pour le point.

Soit, en hexadécimal :

  • 53 pour le 'S'
  • 2E pour le point
  • 2D pour le trait d'union
  • 46 pour le 'F'
  • 2E, à nouveau, pour le point.

Soit, en binaire :

  • 0101 0011 pour le 'S'
  • 0010 1110 pour le point
  • 0010 1101 pour le trait d'union
  • 0100 0110 pour le 'F'
  • 0010 1110, à nouveau, pour le point.

Que se passe-t-il lorsque, dans un texte sur la S.-F., on utilise aussi la lettre alpha : « Quelles nouvelles de S.-F. Jean-Marc Gouanvic a-t-il mis au sommaire de l'anthologie Sol α ? » ?

Sachant que chaque signe doit en binaire être de longueur égale, tout devient alors plus long :

  • 83 pour le 'S'
  • 46 pour le point
  • 45 pour le trait d'union
  • 70 pour le 'F'
  • 46, à nouveau, pour le point
  • 945 pour l'alpha.

Soit, en hexadécimal :

  • 00 53 pour le 'S'
  • 00 2E pour le point
  • 00 2D pour le trait d'union
  • 00 46 pour le 'F'
  • 00 2E, à nouveau, pour le point
  • 03 B1 pour l'alpha.

Soit, en binaire :

  • 0000 0000 0101 0011 pour le 'S'
  • 0000 0000 0010 1110 pour le point
  • 0000 0000 0010 1101 pour le trait d'union
  • 0000 0000 0100 0110 pour le 'F'
  • 0000 0000 0010 1110, à nouveau, pour le point
  • 0000 0011 1011 0001 pour l'alpha.

et le texte résultant prend plus de place sur le disque dur, nécessite plus de mémoire pour son traitement, est plus long à transmettre télématiquement.

Et cela serait encore pire si jamais par là venait à passer un signe relevant des hautes sphères de l'unicode, à côté duquel le simple 'S' devrait être écrit 0000 0000 0000 0000 0000 0000 0101 0011.

Ces différents types d'encodage numérique selon la longueur portent aussi un nom. UTF-32 désigne un texte unicode où tous les caractères sont représentés par trente-deux positions binaires. UTF-16 correspond, on s'en doute, à seize positions binaires, et donc à un jeu de caractères moindre. Ces deux encodages ne posent pas de problème lorsque les caractères utilisés ont toujours des positions élevées, mais sont trop gourmands lorsque le texte est principalement en caractères latins, avec des accents certes, et parfois un signe hors norme ici où là. C'est à ce niveau qu'intervient UTF-8, qui comme son nom ne l'indique pas n'est pas un encodage sur huit positions mais plutôt une représentation à longueur variable qui suit sa propre forme de numérotation à 8, 16 ou 24 positions selon le besoin. Pour reprendre notre exemple :

  • 83 pour le 'S'
  • 46 pour le point
  • 45 pour le trait d'union
  • 70 pour le 'F'
  • 46, à nouveau, pour le point
  • 945 pour l'alpha.

Soit, en hexadécimal :

  • 53 pour le 'S'
  • 2E pour le point
  • 2D pour le trait d'union
  • 46 pour le 'F'
  • 2E, à nouveau, pour le point
  • CE B1 pour l'alpha, et non plus 03 B1.

Soit, en binaire :

  • 0101 0011 pour le 'S'
  • 0010 1110 pour le point
  • 0010 1101 pour le trait d'union
  • 0100 0110 pour le 'F'
  • 0010 1110, à nouveau, pour le point
  • 1100 1110 1011 0001 pour l'alpha, et non plus 0000 0011 1011 0001.

Pour le site de Quarante-Deux, passer en unicode signifie donc choisir une représentation binaire correspond au mieux à la teneur du contenu, et donc, puisque les textes sont majoritairement en Français avec une exception ici où là, c'est UTF-8 qui remplit manifestement le mieux le cahier des charges en la circonstance.

Précédemment, le site était en US-ASCII, et tous les caractères à partir du cent vingt-neuvième étaient représentés par des entités, un autre système d'encodage propre au SGML, dont le HTML est une application, et qui est complètement perpendiculaire à tout ce qui vient d'être évoqué ci-dessus. Avec cette technique, on le sait, un 'é' peut quand même être inséré au moyen de caractères non accentués, sous forme textuelle, é ou numérique, é.

S'il avait été en ISO-8859-1 (Latin 1), tous les caractères jusqu'au deux cent cinquante-sixième auraient pu être représentés par eux-mêmes, et les suivants par des entités.

S'il est nécessaire de revenir sur ces notions connues, c'est qu'il faut bien comprendre qu'un texte US-ASCII plus entités peut aussi être considéré comme un texte Latin 1 plus entités, ou même déjà comme un texte UTF-8 plus entités. Plus l'encodage s'approche d'unicode, plus le nombre d'entités obligatoires diminue, mais on peut très bien continuer à les utiliser si cela chante.

Passer le site de Quarante-Deux en Latin 1, puis plus tard en unicode, plus particulièrement en UTF-8, consiste donc à modifier une ligne dans la page concernée pour indiquer ce changement, et c'est tout.

Bien sûr, l'avantage est que l'on peut par la suite rendre les choses plus lisibles en se débarrassant des entités mais cela n'est pas une obligation immédiate.

Jusque-là c'est clair, comme dirait notre maître à tous Pierre Dac. Et simple, mais on découvre néanmoins par la suite quelques effets secondaires. Ainsi, les formulaires, comme celui d'exliibris, transmettent différemment les requêtes au serveur s'ils proviennent d'une page UTF-8.

Par exemple, dans les cas US-ASCII et ISO-8859-1 (Latin 1), sympathiquement équivalents dans ce cadre, si l'on cherche, allez, 'Gérard' dans les auteurs, l'URL correspondant est rédigé ainsi dans la barre d'adresse du navigateur :

<http://exliibris.xlii.org/resp.html?q=G%E9rard

par contre, si l'on est en UTF-8, le résultat est différent :

<http://exliibris.xlii.org/resp.html?q=G%C3%A9rard>

On reconnaît au passage l'E9 du Latin 1, et le C3 A9, correspond bien, on s'en doutait, à l'encodage UTF-8 correspondant.

Pour un alpha, on aurait eu respectivement %26%23945%3B en Latin 1, où l'on remarque %26 %23 945 %3B qui se traduit par &#945;, et en UTF-8 %CE%B1.

Passer en unicode/UTF-8 est donc plus compliqué qu'il n'y paraissait au départ puisqu'il faut réécrire entièrement à cette occasion le système d'interprétation des requêtes d'exliibris, en essayant au passage de faire en sorte que les deux formats soient compris automatiquement.

Ce qui fut fait, avec une refonte au passage de l'ensemble du moteur de recherche pour une complète internationalisation.

Qu'y gagne-t-on ?

Tout d'abord, conséquence indirecte, la possibilité de mettre en signet une recherche précédemment effectuée, pour laquelle le formulaire de requête spécialisée sert d'outil de création.

Ce qui permet aussi l'installation d'un module de recherche spécifique à exliibris dans Firefox, à trouver aussi sur le formulaire de requête spécialisée.

Ensuite, si l'on consulte les statistiques de fréquentation d'exliibris, on constate avec étonnement que les utilisateurs viennent d'absolument partout, du Japon, de Grèce, de Russie, du Brésil, etc. En quoi une base de données sur la Science-Fiction publiée en Français peut-elle bien les intéresser ? Mystère ! Ils ont maintenant néanmoins la possibilité d'effectuer une recherche dans leur propre alphabet. Ainsi, si Νίκος Παναγιωτόπουλος ou Александр Абрамович Кабаков font une demande sur leur vrai nom, et non pas sur une de ces affreuses translitérations aléatoires, ils se trouvent ! Ou bien si un chercheur japonais enquête sur les équivalents français de "το Γονίδιο της αμφιϐολίας" ou de "Невозвращенец", il a satisfaction !

C'est beau…