Académique Documents
Professionnel Documents
Culture Documents
http://christian.caleca.free.fr/fibroptique/
Le texte et le binaire...
Le codage des données
S'il est assez naturel de transformer un nombre "humain" (en base 10) dans n'importe quelle autre
base de calcul, y compris la base 2 (et réciproquement), c'est un peu plus compliqué de coder en
binaire les symboles d'écriture.
Pourquoi ?
Parce qu'il n'y a pas réellement d'algorithme mathématique pour le faire et qu'il faudra donc
travailler sur des conventions. Vous savez ce que valent les conventions, elles sont adoptées jusqu'à
ce qu'elles ne le soient plus. De plus, les limites d'une convention sont bien connues :
• Une convention est attachée à un contexte. Lorsque le contexte change, la convention doit
être modifiée. Un exemple simple dans le domaine qui nous intéresse ici : l'adoption par la
Communauté Européenne du symbole de sa monnaie unique, l'euro. Changement de
contexte, ce symbole doit être ajouté à la liste des symboles d'écriture utilisée dans tous les
pays de l'UE.
• Une convention doit satisfaire toutes les parties concernées. Les dites parties cherchant
chacune à faire prévaloir leur point de vue, les conventions sont généralement adoptées trop
tard.
Nous allons ici essayer de passer en revue les principales conventions adoptées pour le codage des
symboles d'écriture, en ayant à l'esprit que nous sommes dans un contexte mondial, avec plusieurs
langues, plusieurs alphabets et, pour compliquer encore le problème, plusieurs systèmes
d'information.
Réalisé à partir des pages du site, du 6 mars 2005 par Laurent BAYSSE
Le codage des données numériques © Christian CALECA
http://christian.caleca.free.fr/fibroptique/
Plan du chapitre
Le codage des données......................................................................................................................... 1
L'Écriture.............................................................................................................................................. 3
Pourquoi écrire ?..............................................................................................................................3
Comment écrire ?.............................................................................................................................3
Les imprimantes.......................................................................................................................... 3
Les écrans....................................................................................................................................3
La méthode globale d'impression................................................................................................4
Au début était le texte...........................................................................................................................5
7 bits pour un caractère....................................................................................................................6
Pour un bit de plus........................................................................................................................... 7
Les as de la confusion......................................................................................................................7
EBCDIC...................................................................................................................................... 8
Pages de codes 437 et 850...........................................................................................................8
Reconstruire la tour de Babel...........................................................................................................9
Conclusion provisoire...................................................................................................................... 9
Autres astuces..................................................................................................................................... 11
Code toujours, tu m'intéresses....................................................................................................... 11
Pourquoi le parti pris du texte ?................................................................................................ 11
La conséquence ?...................................................................................................................... 11
Codage à tous les étages................................................................................................................ 12
Le codage "quoted printable"....................................................................................................12
Le codage Base64..................................................................................................................... 13
Et les autres............................................................................................................................... 16
uuencode...............................................................................................................................16
BinHex..................................................................................................................................16
Conclusions....................................................................................................................................16
Dans le HTML....................................................................................................................................17
Les pieds dans la toile....................................................................................................................17
Les signes nommés................................................................................................................... 17
Une manipulation amusante......................................................................................................17
Que penser de tout ça ?............................................................................................................. 18
Conclusions....................................................................................................................................18
Les faits..................................................................................................................................... 18
Les solutions............................................................................................................................. 19
Le bricolage...............................................................................................................................19
MIME................................................................................................................................................. 20
MIME. C'est quoi ?........................................................................................................................20
MIME et SMTP............................................................................................................................. 20
Note pour les e-mails................................................................................................................ 21
MIME et HTTP..............................................................................................................................21
Avec Internet Explorer 6...........................................................................................................22
Avec Mozilla 1.1.......................................................................................................................22
Anecdotes diverses....................................................................................................................23
Conclusions....................................................................................................................................25
Réalisé à partir des pages du site, du 6 mars 2005 par Laurent BAYSSE
Le codage des données numériques © Christian CALECA
http://christian.caleca.free.fr/fibroptique/
L'Écriture
Pourquoi écrire ?
La question peut paraître stupide, tant l'écrit demeure un moyen primordial
dans nos civilisations pour la communication. Témoin ces quelques pages.
Le problème principal vient, nous le savons, de la multitude de langues
utilisées de part le monde, multitude qui utilise elle même une multitude de
symboles dans sa forme écrite.
Si l'alphabet latin reste probablement le plus utilisé, notons déjà la grande
quantité de symboles altérés par des accentuations et autres contractions
comme le fameux "e dans l'o". L 'alphabet latin reste, même avec toutes les
altérations qu'on lui connaît, largement insuffisant pour permettre l'écriture de
toutes les langues telles que le grec, l'hébreu, l'arabe, le russe et sans parler
encore des langues asiatiques...
Comment écrire ?
Nous parlons d'informatique ; ici, pas de crayons. Les outils qui permettent d'afficher du texte sont
principalement de deux sortes :
Les imprimantes
On peut les classer en deux grandes catégories :
• Les imprimantes dont le ou les jeux de caractères sont formés mécaniquement. Même si
elles n'ont plus cours aujourd'hui, elles ont été parmi les premières. Depuis les ancêtres
utilisant un jeu de marteaux comme les machines à écrire mécaniques, jusqu'aux
"marguerites" (une galette en matériau souple, constituée de pétales, chacun portant un
caractère) en passant par les imprimantes à boule dont IBM était le champion.
Dans tous ces cas, les symboles sont gravés sur un support mécanique et l'impression se fait
par impact sur un ruban encreur intercalé entre l'outil de frappe et le papier.
• Les imprimantes dont les jeux de caractères sont formés à partir d'une matrice de points.
Depuis les antiques imprimantes à aiguilles jusqu'au laser en passant par le jet d'encre, le
principe consiste à dessiner les caractères par impression de points. Dans tous ces cas,
l'imprimante dispose de tables qui contiennent une représentation "bitmap" de l'ensemble
des caractères.
Dans tous les cas, l'imprimante reçoit un code numérique écrit sur 8 bits et déduit de ce code le
caractère qu'elle doit imprimer.
Les écrans
Qu'ils soient à tube cathodique où à cristaux liquides (ou même à plasma), le principe est similaire
aux imprimantes à matrices de points.
Réalisé à partir des pages du site, du 6 mars 2005 par Laurent BAYSSE
Le codage des données numériques © Christian CALECA
http://christian.caleca.free.fr/fibroptique/
Réalisé à partir des pages du site, du 6 mars 2005 par Laurent BAYSSE
Le codage des données numériques © Christian CALECA
http://christian.caleca.free.fr/fibroptique/
Réalisé à partir des pages du site, du 6 mars 2005 par Laurent BAYSSE
Le codage des données numériques © Christian CALECA
http://christian.caleca.free.fr/fibroptique/
Dans ce cas de figure, il n'y a que 7 bits (b0 à b6) qui sont significatifs d'une donnée, le dernier bit
servant juste à ajuster la parité.
Réalisé à partir des pages du site, du 6 mars 2005 par Laurent BAYSSE
Le codage des données numériques © Christian CALECA
http://christian.caleca.free.fr/fibroptique/
ASCII", où certains caractères sont remplacés par d'autres suivant les besoins locaux. Les lecteurs
les plus "anciens" se rappelleront peut-être des configurations hasardeuses de certaines imprimantes
pour arriver à ce qu'elles impriment en français lisible...
Les "caractères" sur fond bleu sont les caractères non imprimables.
Pour bien lire le tableau, il faut construire le code hexadécimal en prenant d'abord le digit de la ligne, puis le digit de
la colonne. Par exemple, la lettre "n" a pour code hexadécimal 6E
Comme vous le constatez, il n'y a aucune lettre accentuée dans ce codage. Ce dernier a donc été
joyeusement "localisé" pour satisfaire aux exigences des divers pays utilisant l'alphabet latin. Cette
situation aboutit rapidement à une impasse, les fichiers ainsi construits n'étant plus exportables dans
d'autres pays. De plus, vous constaterez aisément que l'ajout de caractères supplémentaires (le "é",
le "ç", le "à" etc.) implique obligatoirement la suppression d'autres caractères (le "[", le "]", le "#"
etc.). Ceux qui ont quelques notions de programmation comprendront à quel point c'est facile
d'écrire du code avec un jeu de caractères amputé de ces symboles. Dans la pratique, les
programmeurs sont condamnés à utiliser un clavier US.
Les as de la confusion
Croyez-vous que la situation est suffisamment confuse comme ça ? Vous vous trompez ! D'autres
choses existent, souvent venant de chez IBM.
Réalisé à partir des pages du site, du 6 mars 2005 par Laurent BAYSSE
Le codage des données numériques © Christian CALECA
http://christian.caleca.free.fr/fibroptique/
EBCDIC
Je me contenterai de vous citer la définition issue du "jargon français1" :
Extended Binary Coded Decimal Interchange Code.
Jeu de caractères utilisé sur des dinosaures2 d'IBM3. Il existe en 6 versions parfaitement
incompatibles entre elles, et il y manque pas mal de points de ponctuation absolument nécessaires
dans beaucoup de langages modernes (les caractères manquants varient de plus d'une version à
l'autre...) IBM est accusé d'en avoir fait une tactique de contrôle des utilisateurs. (© Jargon File
3.0.0).
Il existe quelques "moulinettes" capables de convertir tant bien que mal des fichiers codés sous
cette forme en fichiers ASCII.
Bien que l'EBCDIC soit aujourd'hui tout à fait confidentiel, puisqu'il ne concerne que les vieilles
machines IBM, il faut en tenir compte pour les échanges de données inter plateformes, jusqu'à
extinction totale de la race (nous ne devons plus en être très loin).
1 http://www.linux-france.org/prj/jargonf/
2 http://www.linux-france.org/prj/jargonf/D/dinosaure.html
3 http://www.linux-france.org/prj/jargonf/I/IBM.html
Réalisé à partir des pages du site, du 6 mars 2005 par Laurent BAYSSE
Le codage des données numériques © Christian CALECA
http://christian.caleca.free.fr/fibroptique/
Tous les petits "grigris" à partir du code B0 étaient destinés à faire de l'art ASCII étendu. De jolies
interfaces pseudo graphiques sur des terminaux en mode texte.
Si cette page de code est compatible avec l'ASCII US 7 bits (iso-646) il n'en est rien pour le reste,
avec aucune iso-8859. Cette situation a été assez pénalisante, aux débuts de Windows, où l'on
devait souvent jongler avec les fichiers issus d'applications DOS et Windows.
Conclusion provisoire
Comme vous le voyez, nous sommes encore loin de disposer d'un système de codage efficace des
4 http://alis.isoc.org/codage/iso10646/
Réalisé à partir des pages du site, du 6 mars 2005 par Laurent BAYSSE
Le codage des données numériques © Christian CALECA
http://christian.caleca.free.fr/fibroptique/
divers symboles utilisés dans le monde pour communiquer. La situation parait déjà assez
désespérée, mais rassurez-vous, nous n'avons pas encore tout vu...
Note :
Les passionnés de la chose trouveront ici5 beaucoup de détails sur les divers codages existants.
5 http://czyborra.com/charsets/codepages.html
Réalisé à partir des pages du site, du 6 mars 2005 par Laurent BAYSSE
Le codage des données numériques © Christian CALECA
http://christian.caleca.free.fr/fibroptique/
Autres astuces
Code toujours, tu m'intéresses
Par une remarquable tendance à la perversité de l'esprit humain, certains protocoles "applicatifs"
(SMTP par exemple) ont été conçu avec comme axiome de départ qu'il devraient transporter du
texte, alors qu'il est clair qu'ils n'auraient à transporter que des valeurs numériques binaires,
puisqu'un système numérique ne sait finalement faire que cela.
D'ailleurs, le premier besoin qui s'est fait sentir, c'est de pouvoir attacher aux e-mails des fichiers
qui sont tout, sauf du texte pur.
La conséquence ?
Ces protocoles ne peuvent pas simplement transférer des données numériques, puisqu'un octet est à
priori considéré comme l'image d'un caractère et non comme une donnée numérique en elle même.
Ainsi, si vous voulez transférer un fichier qui contient une représentation "bitmap" d'une image,
comme un fichier jpeg, png ou gif, par exemple, vous ne pouvez pas considérer que c'est du texte,
puisque à priori, chaque octet peut prendre n'importe quelle valeur, y compris celle d'un caractère de
contrôle. Vous connaissez beaucoup de pages Web sans aucune image dedans ? Vous n'avez jamais
envoyé un e-mail avec une image en pièce jointe ?
La conclusion est qu'il a fallu trouver une astuce pour transporter des données purement numériques
Réalisé à partir des pages du site, du 6 mars 2005 par Laurent BAYSSE
Le codage des données numériques © Christian CALECA
http://christian.caleca.free.fr/fibroptique/
Réalisé à partir des pages du site, du 6 mars 2005 par Laurent BAYSSE
Le codage des données numériques © Christian CALECA
http://christian.caleca.free.fr/fibroptique/
Return-Path: <christian.caleca@free.fr>
...
From: "Christian Caleca" <christian.caleca@free.fr>
To: <christian.caleca@free.fr>
Subject: quoted
Date: Tue, 5 Nov 2002 10:51:34 +0100
MIME-Version: 1.0
Content-Type: text/plain;
charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
...
X-Mailer: Microsoft Outlook Express 6.00.2800.1106
X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2800.1106
=E7=E0 et l=E0
Notez que l'on parle ici de MIME, en indiquant, la nature du contenu (text/plain), le jeu de
caractères utilisé (iso-8859-1) et le mode d'encodage : quoted-printable. Nous y reviendrons plus
tard.
Le codage Base64
Plus généralement, ce codage permettra de passer non seulement du texte codé sur 8 bits, mais aussi
tout type de données constituées d'octets. Voyons d'abord avec du texte.
Là aussi, il faudra commencer par indiquer en quel code est écrit le texte initial. Pour nous, toujours
iso-8859-1.
Trois caractères de 8 bits (24 bits au total) sont découpés sous la forme de 4 paquets de 6 bits
(toujours 24 bits au total). Chaque valeur sur 6 bits, comprise donc entre 0 et 3F en hexadécimal,
sera symbolisée par un caractère présent, et avec le même code, dans toutes les versions de code
ASCII et EBCDIC. La table d'équivalence est celle qui suit. Remarquez que les caractères choisis
sont tous codés sur 7 bits en US-ASCII, mais que la valeur qu'ils représentent n'est pas leur code
ASCII
Réalisé à partir des pages du site, du 6 mars 2005 par Laurent BAYSSE
Le codage des données numériques © Christian CALECA
http://christian.caleca.free.fr/fibroptique/
dec hex car. dec hex car. dec hex car. dec hex car.
0 0 A 16 10 Q 32 20 g 48 30 w
1 1 B 17 11 R 33 21 h 49 31 x
2 2 C 18 12 S 34 22 i 50 32 y
3 3 D 19 13 T 35 23 j 51 33 z
4 4 E 20 14 U 36 24 k 52 34 0
5 5 F 21 15 V 37 25 l 53 35 1
6 6 G 22 16 W 38 26 m 54 36 2
7 7 H 23 17 X 39 27 n 55 37 3
8 8 I 24 18 Y 40 28 o 56 38 4
9 9 J 25 19 Z 41 29 p 57 39 5
10 A K 26 1A a 42 2A q 58 3A 6
11 B L 27 1B b 43 2B r 59 3B 7
12 C M 28 1C c 44 2C s 60 3C 8
13 D N 29 1D d 45 2D t 61 3D 9
14 E O 30 1E e 46 2E u 62 3E +
15 F P 31 1F f 47 2F v 63 3F /
Comme cette explication doit paraître fumeuse à plus d'un (moi-même, plus je la relis, plus je la
trouve fumeuse), là encore, prenons un exemple. Soit à coder le texte extrêmement simple : 012
Ce texte est destiné à être écrit avec un codage iso-8859-1.
caractère initial 0 1 2
Code ASCII hexa 30 31 32
Code ASCII
00110000 00110001 00110010
binaire
Bien. nous avons donc la suite de 24 bits suivante : 001100000011000100110010. Nous allons
maintenant la couper en quatre morceaux de 6 bits :
les valeurs sur 6 bits 001100 000011 000100 110010
Equivalent hexadécimal 0C 03 04 32
Caractère équivalent en
M D E y
Base64
Et voilà. 012 donne, une fois codé en Base 64 MDEy. Constatez comme c'est simple. Constatez
surtout que ces caractères seront transcrits en US-ASCII, donc sur 7 bits.
Pour décoder, il suffit de le faire dans l'autre sens.
Refaisons la manipulation avec un e-mail codé en Base64 :
Réalisé à partir des pages du site, du 6 mars 2005 par Laurent BAYSSE
Le codage des données numériques © Christian CALECA
http://christian.caleca.free.fr/fibroptique/
Return-Path: <christian.caleca@free.fr>
...
From: "Christian Caleca" <christian.caleca@free.fr>
To: <christian.caleca@free.fr>
Subject: Base 64 (1)
Date: Tue, 5 Nov 2002 11:07:11 +0100
MIME-Version: 1.0
Content-Type: text/plain;
charset="iso-8859-1"
Content-Transfer-Encoding: base64
...
X-Mailer: Microsoft Outlook Express 6.00.2800.1106
X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2800.1106
MDEy
Et voilà le travail.
Ça, c'est une démo "commerciale", c'est à dire "qui ne montre que ce qui est facile et qui marche
bien". Vos messages contiennent tous un nombre de caractères qui est un exact multiple de 3 ?
Dans ce cas (nombre de caractères qui n'est pas un multiple de 3), le système de codage va "remplir
le trou" avec un caractère spécial, qui ne sera pas interprété à l'arrivée. Ce caractère est le signe =
Voyons ce que ça donne si le texte initial ne contient plus que le seul caractère 0.
• Le premier groupe de 6 octets sera toujours le même : 001100 qui donne M
• Le second sera : 00 (complété avec des 0, donc : 000000) qui donne A
• Comme il faut 24 bits quand même, on ajoutera deux fois le caractère =
Au total, on aura MA==
Vérification par l'e-mail :
Return-Path: <christian.caleca@free.fr>
...
From: "Christian Caleca" <christian.caleca@free.fr>
To: <christian.caleca@free.fr>
Subject: base 64 (3)
Date: Tue, 5 Nov 2002 11:18:06 +0100
MIME-Version: 1.0
Content-Type: text/plain;
charset="iso-8859-1"
Content-Transfer-Encoding: base64
...
X-Mailer: Microsoft Outlook Express 6.00.2800.1106
X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2800.1106
MA==
CQFD.
Réalisé à partir des pages du site, du 6 mars 2005 par Laurent BAYSSE
Le codage des données numériques © Christian CALECA
http://christian.caleca.free.fr/fibroptique/
Et les autres...
uuencode
Bien entendu, d'autres conventions existent, mais n'appartiennent pas aux système MIME. Par
exemple UUENCODE, assez proche de Base64, mais antérieur, utilisé sur plateformes Unix.
BinHex
Un codage propriétaire, créé dans le monde Macintosh pour les mêmes raisons...
Vous le voyez, les astuces ne manquent pas pour utiliser exclusivement de l'ASCII 7 bits dans le
transport de n'importe quelle donnée.
Conclusions
En plus du codage des caractères dans des tables de 7, 8 ou même 16 bits, il faut donc ajouter des
systèmes qui vont s'efforcer de représenter tout type de donnée sous forme de texte 7 bits.
Ceci nous amène naturellement à parler de MIME...
Réalisé à partir des pages du site, du 6 mars 2005 par Laurent BAYSSE
Le codage des données numériques © Christian CALECA
http://christian.caleca.free.fr/fibroptique/
Dans le HTML
Les pieds dans la toile
Bien que pour HTTP, protocole apte à transmettre des flux d'octets sans considérer que ce sont
forcément des caractères, bon nombre de problèmes sont à résoudre.
Le langage HTML (Hyper Text Markup Language), lui aussi, propose des méthodes particulières
pour traiter les caractères non US-ASCII. Il règne d'ailleurs dans ce domaine la plus grande
confusion.
Avec la version 3.2 du HTML, il n'y avait normalement pas d'autre possibilité que de passer par un
transcodage du type "signes nommés". Depuis le version 4.0 de HTML, il est théoriquement
possible de définir dans l'en-tête du document quel jeu de caractères est utilisé.
Comme HTML est probablement le lieu où les normes sont le moins respectées, il convient tout de
même de rester prudent...
devrait à elle seule permettre l'emploi de tous les symboles définis par iso-8859-1 (version 4.0
uniquement).
Réalisé à partir des pages du site, du 6 mars 2005 par Laurent BAYSSE
Le codage des données numériques © Christian CALECA
http://christian.caleca.free.fr/fibroptique/
même pas trop en demander, ça ne fonctionne pas pour l' euro avec Netscape 4.78 sous Linux, qui
affiche à la place un ? .
D'autres éditeurs, comme DreamWeaver (de Macromedia) ou Golive (d'Adobe) sont plus
orthodoxes et, non seulement annonceront un "charset=iso-8869-1", mais encore utiliseront les
signes nommés pour les caractères non US.
L'exemple qui suit est "bricolé" directement dans le source HTML. La même ligne sera codée selon
diverses façons :
Caractères codage
é è ç ù à ê € (sans codage)
éèçùàê€ FrontPage 2000
é è ç ù à ê
é è ç ù à ê € € DreamWeaver 4
é è ç ù à ê
é è ç ù à ê € € Golive 5
Normalement, il y a de grandes chances que vous voyez tout ça correctement. Maintenant, si vous
utilisez Internet Explorer, allez dans "Affichage", puis "Codage" et changez le codage par défaut.
Là, vous risquez de voir les limites de FrontPage qui n'utilise pas systématiquement les signes
nommés, même si en théorie, HTML 4.0 devrait le permettre. Ceux qui n'utilisent pas IE doivent
avoir quelque part une fonction équivalente, pour changer l'affichage par défaut.
Notez la curieuse façon de coder le symbole de l'euro par Golive 5 : € . C'est tout
simplement sa valeur numérique, en hexadécimal, dans la normalisation unicode (16 bits)...
Conclusions
Si vous n'avez pas encore attrapé le vertige, vous ne l'attraperez plus. Sinon, essayons de consolider
un peu nos positions.
Les faits
• Les systèmes numériques ne savent traiter que des informations binaires, donc numériques.
• Les protocoles applicatifs, le plus souvent, ont besoin de transporter du texte.
• Le texte est destiné à être lu, donc écrit, et n'est pas constitué d'une collection de valeurs
numériques, mais d'une collection de symboles graphiques : Un alphabet.
• Il n'y a pas qu'un seul alphabet au monde.
• Les protocoles applicatifs peuvent avoir aussi à échanger des données qui ne sont pas du
Réalisé à partir des pages du site, du 6 mars 2005 par Laurent BAYSSE
Le codage des données numériques © Christian CALECA
http://christian.caleca.free.fr/fibroptique/
Les solutions
• Coder sur 7 bits un jeu de caractères minimal (US-ASCII), mais il n'y a pas que l'américain
dans le monde, et 128 valeurs ne suffisent pas pour des langues riches en lettres accentuées.
• Coder sur 8 bits, mais ça ne suffit pas non plus pour toutes les langues possibles.
• Coder sur 16 bits, mais ça alourdit considérablement la taille des données. De plus, l'unité
courante de transport est l'octet (8 bits), ça ne simplifie pas.
Le bricolage
Le "bricolage" le plus propre consiste à utiliser un jeu de caractères minimal et de coder les
caractères supplémentaires par une combinaison identifiable des caractères de base. C'est cette
solution qui est le plus souvent mise en oeuvre, et elle donne finalement les meilleurs résultats.
• Codage "quoted-printable" (e-mails, imprimantes...)
• Codage "Base64" (e-mails, fichiers pouvant contenir autre chose que du texte pur...)
• Signes nommés (HTML)
Réalisé à partir des pages du site, du 6 mars 2005 par Laurent BAYSSE
Le codage des données numériques © Christian CALECA
http://christian.caleca.free.fr/fibroptique/
MIME
MIME. C'est quoi ?
Multipurpose Internet Mail Extension. Comme son nom l'indique, c'est une suite d'extensions pour
permettre, principalement aux e-mails, de transporter autre chose que du texte, à savoir, du son, des
images, de la vidéo... Autant de choses pour lesquelles la messagerie n'est à priori pas faite.
Ces extensions servent également sur le web, lorsque l'on utilise HTTP pour transporter autre chose
que du texte (ce qui est souvent le cas). Voyez le chapitre sur HTTP7 à ce propos.
MIME rassemble deux choses distinctes :
• Une description normalisée d'un type de document (non texte pur).
• Le mode de codage employé pour le transporter.
MIME et SMTP
C'est ici que MIME prend toute son importance. En effet, en plus de pouvoir définir des types de
documents, il peut aussi définir des types d'encodages, comme Base64 ou Quoted-Printable.
Un seul exemple significatif. Il reprendra ce que nous avons eu l'occasion de voir par ailleurs.
Le message contient le texte ::
juste un texte légèrement accentué...
Suivi d'une image gif.
codé Quoted-Printable , suivi d'une image gif en pièce jointe. Voici le message tel qu'il est reçu :
Return-Path: <christian.caleca@free.fr>
...
From: "Christian Caleca" <christian.caleca@free.fr>
To: <christian.caleca@free.fr>
Subject: demo MIME
Date: Sat, 9 Nov 2002 11:29:09 +0100
MIME-Version: 1.0
Content-Type: multipart/mixed;
On est averti qu'il y aura plusieurs morceaux de type différents...
boundary="----=_NextPart_000_0044_01C287E3.38B13A20"
Avec un séparateur bien défini.
X-Priority: 3
X-MSMail-Priority: Normal
X-Mailer: Microsoft Outlook Express 6.00.2800.1106
X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2800.1106
------=_NextPart_000_0044_01C287E3.38B13A20
Content-Type: text/plain;
charset="iso-8859-1"
7 http://christian.caleca.free.fr/http/le_protocole.html
ou le fichier « http.pdf »
Réalisé à partir des pages du site, du 6 mars 2005 par Laurent BAYSSE
Le codage des données numériques © Christian CALECA
http://christian.caleca.free.fr/fibroptique/
Content-Transfer-Encoding: quoted-printable
La partie texte, codée "quoted-printable"...
------=_NextPart_000_0044_01C287E3.38B13A20--
MIME et HTTP
Nous en avons déjà un exemple dans le chapitre HTTP, pour transporter une image gif dans une
page html. Mais dans ce cas, il n'y a pas de codage (type Base64 ou quoted-printable), les octets
sont brutalement transportés par le protocole. MIME sert juste à définir le type de document.
Voici juste un exemple, où HTTP va transporter un document MS Word. La manipulation est faite
avec Internet Explorer 6 et Mozilla 1.1 sur une plateforme Windows disposant de MS Word. Un
sniffeur regarde ce qu'il se passe au niveau HTTP.
Réalisé à partir des pages du site, du 6 mars 2005 par Laurent BAYSSE
Le codage des données numériques © Christian CALECA
http://christian.caleca.free.fr/fibroptique/
0000 d0 cf 11 e0 a1 b1 1a e1 00 00 00 00 00 00 00 00 ................
0010 00 00 00 00 00 00 00 00 3e 00 03 00 fe ff 09 00 ........>.......
...
Les octets surlignés montrent à l'évidence que HTTP transporte sur 8 bits
Une fois la réception terminée, Internet Explorer va afficher directement le document, en utilisant
MS Word comme "plug-in".
Réalisé à partir des pages du site, du 6 mars 2005 par Laurent BAYSSE
Le codage des données numériques © Christian CALECA
http://christian.caleca.free.fr/fibroptique/
0000 d0 cf 11 e0 a1 b1 1a e1 00 00 00 00 00 00 00 00 ................
0010 00 00 00 00 00 00 00 00 3e 00 03 00 fe ff 09 00 ........>.......
Rien de changé de ce côté là. Mozilla, une fois le fichier reçu proposera de l'enregistrer ou de
l'afficher en démarrant MS Word, comme une application séparée.
Anecdotes diverses
Dans la lancée, la même manip, sous Linux (Mandrake 9, avec OpenOffice installé), avec le même
Mozilla 1.1 et Konqueror 3.0.3. Les sniffs donnant toujours la même chose, inutile de les répéter.
• Mozilla va ouvrir le document avec Open Office Writer et, si le fichier MS Word n'est pas
trop complexe, il sera lisible.
• Konqueror va proposer d'ouvrir le document avec kword. Mais kword est incapable d'ouvrir
un fichier MS Word. Konqueror nous montre cependant quelque chose d'intéressant :
Réalisé à partir des pages du site, du 6 mars 2005 par Laurent BAYSSE
Le codage des données numériques © Christian CALECA
http://christian.caleca.free.fr/fibroptique/
Konqueror montre que l'on peut facilement le configurer de manière à ce qu'il ouvre la "bonne
application" en fonction du type MIME annoncé. L'illustration ci-dessus montre la correction faite
pour que Konqueror ouvre désormais les types application/msword avec OpenOffice Writer. L'objet
de cette manipulation est, vous l'avez compris, de montrer l'intérêt du type MIME annoncé dans une
transmission HTTP.
Réalisé à partir des pages du site, du 6 mars 2005 par Laurent BAYSSE
Le codage des données numériques © Christian CALECA
http://christian.caleca.free.fr/fibroptique/
Conclusions
Ce chapitre vous aura, je l'espère, aidé à mieux comprendre :
• Comment le Net arrive tout de même plutôt bien à se sortir élégamment du piège permanent
que présente le transport de données au niveau mondial,
• certains messages que vos navigateurs web peuvent vous envoyer lorsque vous visitez des
sites étrangers,
• pourquoi certains mails que vous pouvez recevoir peuvent être illisibles, et, peut-être,
comment y remédier,
• les précautions qu'il faut prendre pour avoir de bonnes chances d'envoyer des e-mails lisibles
par le plus grand nombre...
Réalisé à partir des pages du site, du 6 mars 2005 par Laurent BAYSSE