Note sur les fichiers de caractères ASCII

Cours PLURITAL n°2 du 18/10/2005

Jean-François Perrot

Introduction
L'exemple de RTF
L'exemple de HTML
Conclusion

Introduction, motivation

Les différentes machines interprètent l'information binaire chacune a sa manière.
Bornons-nous à évoquer ici la question des processeurs gros-boutiens et petit-boutiens
(en anglais big-endian/little-endian) : cette distinction, empruntée aux Voyages de Gulliver,
vise l'ordre dans lequel les octets sont interprétés (par exemple, pour y lire un nombre).
Pour une définition, voir l'article de Wikipédia, et pour la terminologie un débat sur la liste Debian.

Il en résulte qu'un fichier binaire aura sur des machines différentes des interprétations différentes,
ce qui nuit gravement à la communication.
C'est pourquoi on emploie souvent les caractères ASCII comme étape intermédiaire d'interprétation :
un fichier qui est réputé contenir uniquement des caractères ASCII est en principe interprété
de la même manière par toutes les machines actuelles.
Par exemple, c'est cette identité de traitement qui rend possible le courrier électronique :
en principe, il doit être enrièrement rédigé en ASCII,
et on observe couramment que les caractères non-ASCII sont mal transmis ! Affaire à suivre...

Mais les fichiers ASCII qui sont aujourd'hui échangés à travers le réseau font pour la plupart
l'objet d'une interprétation supplémentaire, par un logiciel comme Word ou comme un navigateur Web.
Nous en évoquerons ici deux exemples : les fichiers RTF et les fichiers HTML.

L'exemple de RTF


Le format RTF (Rich Text Format) donne la possibilité d'échanger du texte mis en forme
(avec des caractères gras, italiques, des choix de justification, des choix de polices, etc.)
entre des logiciels d'édition normalement incompatibles. Voyez l'article de Wikipédia à son sujet.
Pour comprendre de quoi il retourne, faites l'expérience suivante :
  1. téléchargez le petit fichier Ex.rtf (extrait de l'article de Wikipédia),
  2. inspectez-le avec hexdump (ou avec un éditeur de "texte pur" comme NotePad sous Windows),
    pour constater qu'il ne contient que de l'ASCII
  3. et ouvrez-le enfin avec Word.
Vous pourrez aisément fabriquer des fichiers RTF avec Word
en utilisant le format Texte mis en forme (RTF) de la commande  Enregistrez sous... (menu Fichier).
Essayez de retrouver le texte dans la masse d'informations que contient un tel fichier,
et observez comment les caractères non-ASCII sont représentés.

Exercice :  voici une image fidèle d'un fichier Word

fichier Word


Ce fichier a été sauvegardé en RTF, sous le nom ExRTF.rtf.
Le fichier ExRTFb.rtf a été obtenu en supprimant dans ce fichier un grand nombre d'informations jugées superflues.
  1. Téléchargez-les tous les deux et vérifiez que Word vous restitue l'apparence illustrée ci-dessus pour l'un
    et une apparence un peu différente pour l'autre.
  2. Quelles informations faut-il restituer à ExRTFb.rtf pour que le titre soit de nouveau centré ?
  3. Comment retrouver la différence de polices dans la ligne 3 ?

L'exemple de HTML

Nous aurons l'occasion de revenir sur Hypertext Markup Language.
Pour l'instant, contentons-nous d'observer avec un navigateur quelconque le code source (ou la page source)
d'une page Web. Voici par exemple le début de la table du code ASCII :

<table style="width: 100%; text-align: left;" border="2" cellpadding="2" cellspacing="2">
<tbody><tr>
<td>
<table>
<tbody>
<tr>
<th style="vertical-align: top;">D&acute;c</th>
<th style="vertical-align: top;"> Hex</th>
<th style="vertical-align: top;">Car</th>
</tr>
<tr>
<td style="vertical-align: top;">00</td>
<td style="vertical-align: top;">00</td>
<td style="vertical-align: top;">NUL</td>
</tr>

On voit que l'effet de mise en table est produit par l'interprétation que le navigateur donne de ce code
qui est lui-même entièrement rédigé en ASCII (et transmis comme tel sur le réseau).

Conclusion


Les exemples RTF et HTML font apparaître l'ambiguïté du rôle des caractères ASCII :
Comme nous le verrons dans la suite, dans le premier rôle les caractères ASCII seront remplacés par les caractères Unicode,
tandis qu'ils resteront immuables dans leur rôle de métacaractères.