[Linux-bruxelles] Problème d'encodage de caractères

Ludovic Brenta ludovic.brenta at insalien.org
Mar 27 Mai 20:28:11 CEST 2003


C'est probablement la variable LANG qui détermine l'encodage externe
utilisé pour les fichiers texte; la glibc interprète cette variable et
choisit l'encodage en conséquence quand tu fais un fwrite() ou un
printf().

Sur RH 7.1, l'encodage est probablement ISO-8859-1 (Latin-1), qui
encode chaque caractère sur 8 bits.

Sur Red Hat 9, l'encodage est UTF-8, qui utilise 8 bits pour les
caractères dont le code Unicode est <= 127, 16 bits pour les suivants,
puis 24 et 32 bits pour les suivants.  Ceci explique que les lettres
accentuées soient encodées sur deux octets, dont le premier est > 128.

Regarde ce que dit la commande "locale -a" sur tes systèmes, il y a
sûrement des locales UTF-8 et d'autres non UTF-8.

Personnellement, je recommande de tout convertir à l'UTF-8, parce que
cet encodage convient pour tous les caractères Unicode et ASCII 7
bits.  Les autres encodages tels que ISO-8859-1 ne conviennent que
pour un petit nombre (256) de caractères.  D'ailleurs, toutes les
distributions GNU/Linux sont en train de migrer vers l'UTF-8, ce qui
explique la différence entre Red Hat 7.1 et 9 (et aussi le fait que
GNOME 2.x utilise l'UTF-8 comme encodage interne et externe).

Le principal problème, c'est qu'un "simple fichier texte" est
tellement simple qu'il n'indique pas explicitement l'encodage utilisé;
c'est la locale qui le décide.  Si possible, ce serait une bonne idée
d'indiquer l'encodage dans chaque fichier.

Tu peux convertir un fichier ISO-8859-1 en UTF-8 avec la commande
suivante :

recode Latin-1..UTF-8 fichier

Au fait, c'est normal que ça marche dans xemacs : il utilise des
heuristiques pour deviner l'encodage en examinant chaque octet du
fichier...

-- 
Ludovic Brenta.





Plus d'informations sur la liste de diffusion Linux-bruxelles