[Toulibre] Courrier électronique: quel encodage utiliser ?
Sébastien Dinot
sdinot at april.org
Jeu 16 Nov 22:33:42 CET 2006
Bonsoir,
lafrech a écrit :
| Y a-t-il un encodage qui fasse consensus et que je puisse utiliser
| et recommander aux gens avec qui je communique ? (J'ai l'impression
| que non...)
Pour compléter les réponses précédentes, non, il n'y a pas d'encodage
universel au sens où le problème se situe à quatre niveaux :
1. Les jeux de caractères n'ont pas tous la même taille et n'encodent
pas tous le même ensemble de symboles. On ne peut donc généralement
pas obtenir de relation bijective entre deux jeux (i.e. pouvoir
faire correspondre à chaque caractère d'un jeu un caractère de
l'autre jeu). A titre d'exemple :
Pour la taille :
- Le jeu US-ASCII à une capacité de 128 caractères.
- Les jeux ISO-8859-xx, CP437, CP850, CP1252 ont une capacité de
256 caractères.
- L'UTF-16 de 65 536.
- L'UTF-8, UCS4 de 4 294 967 296 (mais à ce jour, seuls environ
70 000 sont définis).
Pour l'ensemble de caractères :
- L'ISO-8859-15 définit un code pour le symbole Euro et la ligature
entre le o et le e mais pas l'ISO-8859-1.
- Le jeu CP1252 définit un code pour les trois points de suspension
(qui apparaissent donc sous la forme d'un seul caractère) mais
pas le jeu ISO-8859-15.
2. Une fois que l'ensemble de symboles représentés par un jeu de
caractères est défini, plusieurs stratégies peuvent être utilisées
pour encoder ce jeu et donc stocker les chaînes, les manipuler ou
les transférer.
On peut annoncer chaque caractère par :
- un nombre constant d'octets : 1 pour l'ISO-8859-15), 2 pour
l'UTF-16, 4 pour l'UCS-4.
- un nombre variable d'octets : de 1 à 6 pour l'UTF-8.
=> En fait, l'UCS-4 et l'UTF-8 sont deux encodages différents
d'un même jeu de caractères nommé « Unicode ». UCS-4 vise la
simplicité, UTF-8 la minimisation de l'empreinte mémoire.
- un changement de base (chaque digit étant alors codé sur un octet
différent) généralement accompagné d'un décalage constant ou
variable pour amener les valeurs résultantes dans la plage de
caractères US-ASCII considérée comme « robuste ». C'est le cas du
Quoted-Printable (=20 pour l'espace de code ASCII 32), des
entités XML ( pour l'espace), de l'encodage en base 64.
- une séquence symbolique (entités HTML telles que ).
Anecdote : pour corser le tout, certains jeux de caractères peuvent
ou non s'annoncer par une séquence spéciale (c'est notamment le cas
de l'UTF-8 dans les fichiers).
3. Bien évidemment, les choses seraient trop simples si les systèmes
d'exploitation et les outils qu'ils font tourner étaient
« polyglottes ». Chacun ayant son « dialecte » natif et causant
plus ou moins bien quelques « langues étrangères », selon la cible
finale, on peut être amené à conseiller des jeux de caractères
différents.
4. Cerise sur le gâteau, reste le problème de l'encodage des fins de
ligne (CR sur Mac, LF sur Unix, CR-LF (ou LF) sous MS-Windows).
Et je ne parle même pas des fichiers successivement édités sur Mac,
MS-Windows et GNU/Linux avec des outils plus ou moins sérieux (j'ai
connu, c'est atroce et les outils de réencodage les plus puissants s'y
cassent les dents : il ne vous reste alors que votre bon vieux cerveau
et vos mimines pour réparer les dégâts).
Au passage, si vous avez besoin de réencoder des textes, je vous
conseille vivement recode. A mes yeux, c'est le nec plus ultra en la
matière. Par exemple :
Texte Unix (ISO-8859-15/LF) vers MS-Windows (CP1252/CR-LF) :
echo -e "<p>Sébastien &\nses sœurs</p>" | recode l9/..cp1252/cl
Même texte vers HTML 4 avec préservation des caractères diacritiques
(supprimez « --diacritic » pour voir) :
echo -e "<p>Sébastien &\nses sœurs</p>" | recode --diacritic l9/..h4/
Idem vers XML (testez la commande pour observer les différences avec
la ligne précédente) :
echo -e "<p>Sébastien &\nses sœurs</p>" | recode --diacritic l9/..h0/
Idem en Quoted-Printable :
echo -e "<p>Sébastien &\nses sœurs</p>" | recode l9/../QP
A++, Sébastien
--
Sébastien Dinot, sdinot at april.org
Secrétaire de l'APRIL (http://www.april.org)
Association pour la Promotion et la Recherche en Informatique Libre
Plus d'informations sur la liste de diffusion Toulouse-ll