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

Ludovic Brenta ludovic.brenta at insalien.org
Mer 28 Mai 13:33:51 CEST 2003


Christophe Schockaert <Christophe.Schockaert at spacebel.be> writes:

> > From: Ludovic Brenta [mailto:ludovic.brenta at insalien.org]
> > Sent: mercredi 28 mai 2003 11:16
> >
> > > Autrement dit, comment spécifier l'encodage UTF-8 par défaut sur
> > > ma RH 7.1 ?
> > Cela dépend de l'application utilisée.  Tu peux mettre ceci dans ton
> > .emacs, par exemple:
> Tiens, pourtant il semble avoir une définition système qque part.
> Quand j'exécute, en RH 9, Perl sur un script, il essaie de comprendre les
> caractères en UTF-8... Alors que sur la 7.1 il les décode en Latin-1.

Oui, l'interpréteur Perl utilise l'encodage défini par la locale, mais
essaie d'ajouter ceci dans un script:

#/bin/perl

use utf8;

et l'interpréteur saura que ton script est encodé en UTF-8, quelle que
soit la locale à l'exécution.

Essaie "man utf8" et "man perlunicode".

Attention si tu programmes en C ou C++ : il n'y a aucun moyen de
contrôler l'encodage des fichiers source en dehors de $LANG; or,
l'encodage du fichier source détermine celui du fichier exécutable,
qui doit correspondre à la locale de celui qui exécute le programme.

La solution que je préconise pour C et C++, c'est d'obéir à leur norme
ISO qui définit strictement le jeu de caractères acceptés dans le code
source; ce jeu exclut tous les caractères accentués.  Si tu veux
mettre des messages avec des accents dans un programme C ou C++,
utilise gettext.
 
> > > Oui, mais non, enfin je vois pas comment je peux spécifier
> > > l'encodage dans un script Perl ou bash... ni dans un fichier
> > > texte style README...
> > 
> > Facile, toujours dans emacs, il y a deux solutions.
> > [...]
> Wow !
> Le hic, c'est que je ne suis pas le seul développeur, chacun utilise
> son éditeur.  De plus, on a près de 9000 fichiers en gestion de
> configuration.  Alors, ajouter dans tous ces fichiers les
> commentaires précisant l'encodage, et ce exclusivement à l'attention
> de emacs, bof.

Tu peux leur dire que les variables d'emacs sont lisibles par les
humains, et qu'elles rendent l'encodage explicite pour tout le monde
et pas seulement emacs.

Mais je suis d'accord, le mieux c'est que l'encodage soit
implicitement UTF-8 pour tous les fichiers et tous les éditeurs.  Par
défaut, emacs enregistre avec l'encodage d'origine, tel que déterminé
par ses heuristiques, mais tu peux le forcer à ré-encoder avec un hook
au moment d'enregistrer.

Pour les nouveaux fichiers, tu peux mettre l'encodage explicitement,
et même ajouter les fameuses variables avec un hook.

> Et "perdre" l'historique pour cause de ré-encodage vers UTF-8, bof
> aussi (oui, bonjour le diff entre la révision 1.1 en Latin-1 et la
> révision 1.5 en UTF-8 !!!). Cependant, si c'est l'avenir, mieux vaut
> peut-être faire la transition le plus tôt possible.  On va y
> réfléchir...

Révision 1.1? C'est sous CVS?  Alleluia, tu peux ré-encoder la base de
données elle-même (sauf les binaires, bien sûr)!

$ find /var/lib/cvs -type f -exec recode Latin-1..UTF-8 {} \;

Au fait, pour convaincre tes collègues du bien-fondé de cette
conversion, demande-leur quel est l'encodage utilisé en ce moment pour
chaque fichier.  Je te parie une bière qu'ils ne savent même pas,
puisque la valeur "par défaut" est implicite et dépend de la locale de
leur éditeur.

-- 
Ludovic Brenta.





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