[Toulibre] Courrier électronique: quel encodage utiliser ?
patrick
patrick.abul at free.fr
Ven 17 Nov 00:41:14 CET 2006
Le Jeudi 16 Novembre 2006 22:33, Sébastien Dinot a écrit :
> Bonsoir,
Merci pour ce cours d'encodage... :-)
> 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
Plus d'informations sur la liste de diffusion Toulouse-ll