[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