Résumé

  • Le RFC 1843 d’août 1995 décrivit HZ, un format sur sept bits pour mêler ASCII et chinois GB2312. ~{ ouvrait le mode GB, ~} ramenait l’ASCII et ~~ produisait un tilde ordinaire.
  • Le décodeur de base traitait un flux sans règle de longueur de ligne. Le RFC recommandait séparément aux encodeurs des lignes de moins de 80 caractères pour les outils comme more, en fermant le mode GB avant de poursuivre le texte sur la ligne physique suivante.

Un signe de ponctuation faisait l’aiguillage

Sur un ordinateur fondé sur l’ASCII, la plupart des octets imprimables avaient déjà un sens familier. Le chinois posait un autre problème : ses caractères exigeaient deux octets dans les codes employés, et ces codes internes variaient selon les systèmes. Le texte HZ de Fung Fung Lee proposait d’utiliser GB2312 comme répertoire d’échange et de faire voyager le mélange sur sept bits, notamment par courrier électronique. Le RFC parut en 1995, mais son résumé précise qu’il reproduisait un article de Lee daté du 4 septembre 1989. La publication officielle et l’idée initiale ont donc deux dates.

Le fonctionnement se retient presque comme une consigne de cuisine. On commence en mode ASCII, où les caractères ordinaires restent lisibles. Le tilde demande une seconde lecture : ~~ représente le signe lui-même ; ~{ ouvre le mode GB ; un tilde immédiatement suivi d’un saut de ligne indique une continuation qui disparaît au décodage. Dans le mode GB, le lecteur prend les octets deux par deux jusqu’à ~}, qui le ramène à l’ASCII. La valeur d’un octet dépend du mode dans lequel il arrive. Il faut se souvenir de l’aiguillage précédent pour lire le wagon suivant.

Pourquoi le tilde ? Le RFC donne les bornes : le premier octet d’un caractère GB va de $21 à $77 en hexadécimal, le second de $21 à $7E. Les caractères ASCII imprimables partagent une grande partie de cet espace. Le tilde est $7E, au-delà du premier intervalle GB. Placé comme échappement, il se distingue du début d’un caractère chinois valide. Un petit gribouillis au clavier devenait l’agent de circulation d’un flux entier.

L’anglais pouvait continuer à se présenter tel quel. À l’exception des tildes à doubler, les caractères ASCII passaient sans être transformés en paires d’octets. Un fichier purement ASCII, dépourvu de tilde, avait exactement l’aspect d’un fichier ASCII ordinaire. Une phrase pouvait commencer en anglais, glisser vers le chinois puis revenir à l’anglais au même endroit. HZ organisait cette alternance libre, au lieu de traiter chaque document comme un bloc homogène dont il faudrait cacher tout le contenu derrière un codage opaque.

Les fins de ligne ouvraient une deuxième discussion. La séquence tilde puis saut de ligne était consommée sans produire de caractère dans le texte reconstitué. L’auteur du fichier pouvait donc couper une longue ligne matérielle tout en préservant la continuité de la phrase. Le RFC affirme que le décodeur HZ de base n’a aucun besoin de la notion de ligne. Un fichier entier pouvait tenir sur une seule ligne très longue, ou ne comporter aucun saut de ligne. Le lecteur commun n’avait à regarder qu’un caractère en avance et à suivre son mode courant.

Le monde réel, cependant, possédait des terminaux et des programmes de pagination. Pour rendre le fichier agréable dans un outil Unix comme more, le document recommandait à l’encodeur des lignes physiques de moins de 80 caractères. Si le chinois arrivait au bord de la ligne, l’encodeur fermait le mode GB avec ~}, insérait le tilde suivi du saut de ligne consommé, puis rouvrait GB avec ~{ à la ligne suivante. Quelques octets supplémentaires achetaient une page plus commode sans insérer de nouvelle ligne dans le texte décodé. Les exemples du RFC montrent plusieurs présentations matérielles qui rendent la même phrase.

Le mot important est « recommandait ». Lee appelait cette limite une façon d’encoder placée au-dessus du format HZ. Le lecteur de base pouvait rester identique, que l’expéditeur choisisse une longue ligne ou des lignes calibrées pour son terminal. Le RFC mentionnait même la possibilité de décoder à rebours, une fois le mode connu, pour aider un émulateur de terminal à traiter les retours arrière. La décision locale de présentation n’agrandissait pas automatiquement le petit contrat partagé entre logiciels.

Le RFC 1922 publié l’année suivante décrivit une autre solution pour les messages chinois, ISO-2022-CN, avec ses propres règles de désignation et de retour sur chaque ligne. HZ mérite d’être lu pour son interrupteur à tilde et pour son choix de garder le flux indépendant du style de lignes. Le texte chinois trouvait un passage dans le couloir étroit des sept bits. L’ASCII, lui, pouvait continuer de marcher sans changer de costume.