[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