2006-01-10
"répertoire" ? "répertoire" ? "r.ertoire" ? Question de codage de caractère.
Si vous lisez des choses comme "répertoire" ou "r.ertoire" au lieu de "répertoire" sur un écran d'ordinateur, c'est qu'il y a mauvaise interprétation des caractères employés.
Pendant des années la norme par défaut de codage des caractères pour l'Internet a été ISO-Latin1 (ISO-8859-1) puis sa variante avec le symbole euro (ISO-8859-15). Depuis quelques années les choses migrent vers UTF-8.
La chose est transparente pour beaucoup de gens car en général les textes arrivent correctement balisés pour qu'il n'y ait pas d'ambigüité sur la façon de les interpréter. Mais dans certains outils, le choix de l'un ou de l'autre est plus ou moins implicite ou bien un système donné ne supporte pas les deux alors qu'il pourrait être configuré pour le faire. Un cas courant pour les utilisateurs d'Unix modernes (Linux récent, Mac OS X) en environnement hétérogène est de vouloir faire communiquer deux ordinateurs dont l'un ne sait faire que de l'UTF-8 l'autre que du Latin1. Exemples et solutions.
Ce billet comporte une partie technique qui peut faire fuir certains lecteurs. Si vous êtes de ceux-là vous vous reconnaîtrez et ne lirez pas la suite.
Ceux qui utilisent ssh entre des machines Linux et/ou Mac et/ou Windows auront peut-être déjà rencontré le problème, c'est pour eux que cet article est écrit.
Les symptômes
Si vous lisez des choses comme "répertoire" au lieu de "répertoire", il s'agit d'UTF-8 interprété comme du Latin-1.
Si vous lisez des choses comme "r.ertoire" au lieu de "répertoire", il s'agit de Latin-1 interprété comme de l'UTF-8. (Vous verrez peut-être un carré ou autre symbole au lieu du point entre r et e, la chose caractéristique est le fait que le p de répertoire soit absent.)
Le cas que j'ai rencontré
Quand on installe Debian Linux l'installeur demande quelle langue est souhaitée. Les francophones choisissent naturellement le français dans la liste. Debian 3 choisit alors le français codé en ISO-Latin-1 (en fait la variante à laquelle on a ajouté le symbole euro qui n'existait pas à l'époque de la création d'ISO-Latin-1). Ubuntu, une variante intéressante de Debian, choisit le français codé en UTF-8.
Solution rapide pour ce cas : à l'installation d'une Debian comme d'une Ubuntu, choisir les deux variantes du français : "fr_FR.UTF-8" et "fr_FR.ISO-8859-15@euro" (et même d'autres si vous pensez avoir des systèmes qui les utilisent, cela ne devrait pas faire de mal). Si la machine est déjà installée lire la suite.
La suite concerne un serveur SSH sous Linux ou équivalent par exemple Cygwin ou MacOS. La solution 2 est spécifique à Debian (et ses variantes). La solution 3 peut marcher sur certains systèmes (testée seulement sur Debian).
Les "anciens" : serveur ou client Debian ou cygwin, la plupart des clients ssh dont ceux sous Windows
Les "modernes" : serveur ou client Ubuntu ou Mac OS X
Désaccord dans un sens
Cas typique
Si votre client ssh est une machine sous Windows ou un système pas tout récent le texte en provenance du serveur Linux sera interprété comme du Latin-1. Si le serveur est par exemple un système Ubuntu Linux, vous lisez "répertoire".
Solution 1
Utiliser si possible un client ssh qui peut comprendre que le texte lui parvenant est en UTF-8 et lui signifier que c'est votre choix. Problème résolu.
Solution 2
Elle consiste à demander au serveur de s'exprimer dans l'ancien système ISO-Latin-1. Je ne la recommande pas mais dans certains cas elle peut ne poser aucun problème (jusqu'au moment où vous aurez un client moderne).
Si l'administrateur peut intervenir il peut faire
dpkg-reconfigure -plow locales
Une liste de code de langues apparaît. Parmi les façon de coder le français, "fr_FR.UTF-8" sera probablement sélectionnée. Cocher aussi "fr_FR.ISO-8859-15@euro" et confirmer.
L'outil demande alors quelle option doit être choisie par défaut. Si vous souhaitez que tout votre système s'exprime en latin-1 par défaut (la vieille option), choisissez-là. Vous lirez alors quelque chose comme :
Generating locales (this might take a while)...
fr_FR.ISO-8859-15@euro... done fr_FR.UTF-8... done
Tentez une nouvelle connexion, le problème sera probablement résolu.
Solution 3
S'il n'est pas question que tous les utilisateurs de la machine aient ce réglage par défaut, il est possible de dire au serveur que vous souhaitez qu'il s'exprime en latin-1 pour vous seulement. Malheureusement il faut d'abord appliquer la solution 2 (au moins le début) pour que le codage soit disponible. Sinon vous pouvez toujours demander le réglage en question, s'il n'est pas disponible vous aurez de l'anglais...
Si vous tapez
set | grep LANG
vous lirez probablement quelque chose qui ressemble à
LANG=fr_FR.UTF-8 LANGUAGE=fr_FR:fr:en_GB:en
à défaut essayez
set | grep LC
qui chez moi donne le pas très intéressant
MAILCHECK=60
essayer alors
export LANG=fr_FR@euro
puis votre application, par exemple
aptitude update
Les accents sont corrects et je lis parmis le texte résultant :
E: Impossible de bloquer le répertoire des listes... Êtes-vous root ?
Pour que ce changement soit permanent il vous faudra éditer votre .bash_profile et y ajouter la mention
export LANG=fr_FR@euro
Désaccord dans l'autre sens
Cas typique
Si votre client ssh est une machine sous Ubuntu ou MacOS X le texte en provenance du serveur Linux sera interprété comme de l'UTF-8. Si le système Linux s'exprime en ISO-Latin (ancien) vous lisez "r.pertoire" (chaque caractère accentué est incorrect et "avale" le caractère suivant).
Solution 1
Votre client ssh est moderne et comprend l'UTF-8. Il est possible de lui demander d'interpréter en ISO-latin1 (je dois placer une image comme exemple). Problème résolu.
Solution 2
Si l'administrateur peut intervenir il peut faire
dpkg-reconfigure -plow locales
Une liste de code de langues apparaît. Parmi les façon de coder le français, "fr_FR.ISO-8859-15@euro" sera probablement sélectionnée. Cocher aussi "fr_FR.UTF-8" et confirmer.
L'outil demande alors quelle option doit être choisie par défaut. Si vous souhaitez que tout votre système s'exprime en UTF-8 par défaut (la bonne option pour l'avenir), choisissez-là. Vous lirez alors quelque chose comme :
Generating locales (this might take a while)...
fr_FR.ISO-8859-15@euro... done fr_FR.UTF-8... done
Tentez une nouvelle connexion, le problème sera probablement résolu.
Solution 3
S'il n'est pas question que tous les utilisateurs de la machine aient ce réglage par défaut, il est possible de dire au serveur que vous souhaitez qu'il s'exprime en UTF-8 pour vous seulement. Malheureusement il faut d'abord appliquer la solution 2 (au moins le début) pour que le codage soit disponible. Sinon vous pouvez toujours demander le réglage en question, s'il n'est pas disponible vous aurez de l'anglais...
Si vous tapez
set | grep LANG
vous lirez probablement quelque chose qui ressemble à
LANG=fr_FR@euro LANGUAGE=fr_FR:fr:en_GB:en
à défaut essayez
set | grep LC
qui chez moi donne le pas très intéressant
MAILCHECK=60
essayer alors
export LANG=fr_FR.UTF-8
puis votre application, par exemple
aptitude update
Les accents sont corrects et je lis parmis le texte résultant :
E: Impossible de bloquer le répertoire des listes... Êtes-vous root ?
Pour que ce changement soit permanent il vous faudra éditer votre .bash_profile et y ajouter la mention
export LANG=fr_FR.UTF-8
Conclusion
L'UTF-8 est la voie vers des systèmes informatique vraiment internationaux. Les systèmes logiciels les plus modernes le reconnaissent. Je n'ai pas du tout couvert ici l'usage pourtant plus répandu de l'UTF-8 : sur le web. J'espère que cet article répond au besoin pour lequel il a été écrit.
Par Stéphane Gourichon, catégorie Intendance :: Lien permanent
Vos commentaires
Le 2006-01-13, commentaire par David Latapie :: email :: site :: #
Latin-15 ajoute aussi le œ (ou le æ, je ne me souviens plus), parce qu’à la conf' pour le latin-1, le représentant français n’avait pas daigné venir, ou un truc de ce genre.
Le 2006-02-22, commentaire par [Triton] :: #
Les explications sur els caractères manquants sont ici :
www.uzine.net/article1785... (je n'ai pas trop le temps de détailler mais ça permet de préciser l'info de David)
Le 2006-02-22, commentaire par Stéphane Gourichon :: email :: #
Merci Triton pour ce commentaire informatif.
Ajouter un commentaire
Le formulaire de commentaires est désactivé pour cause de spam. Si vous voulez ajouter un commentaire écrivez-moi à gouri chez amphi-gouri.org.
l'amphi-gouri

