[gull] conversion de caractères

Félix Hauri felix at f-hauri.ch
Mon May 9 10:17:26 CEST 2011


On Sun, May 08, 2011 at 10:07:17PM +0200, Erik Rossen wrote:
> On Sun, May 08, 2011 at 06:24:32PM +0200, Paul Bartholdi wrote:
> > Exemple : "ç" est représenté par "c3  83  c2 a7" (hex).
> > 
> > À quel encodage ai-je affaire ?
> 
> UTF8 qui a passé par une conversion erroné ISO-8859-1->UTF8.
> 
> Demonstration avec le logiciel "recode":
> 
> 	rossen at mango:~$ echo ç > test1.txt
> 	rossen at mango:~$ hd test1.txt
> 	00000000  c3 a7 0a                                          |...|
> 	00000003
> 	rossen at mango:~$ recode latin1..utf8 test1.txt
> 	rossen at mango:~$ hd test1.txt
> 	00000000  c3 83 c2 a7 0a                                    |.....|
> 	00000005
> 
> Comment corriger?  Faire l'inverse, i.e. une conversion UTF8->ISO-8859-1:
> 
> 	rossen at mango:~$ recode utf8..latin1 test1.txt
> 	rossen at mango:~$ hd test1.txt
> 	00000000  c3 a7 0a                                          |...|
> 	00000003

Oui, et même 2x:

$ perl -e 'printf "%s\n", join "",map { chr(hex($_)) } qw |c3  83  c2 a7|;' \
    | recode u8..lat1 | recode u8..lat1
ç

... Enfin tout dépend de ton environnement:

(en root:
# dpkg-reconfigure locales
 vérifer que les locales fr_CH.ISO-8859-1 et fr_CH.UTF-8 sont cochées
;)

Ma console est ``ISO-8859-1'' (ou latin 1 par défaut)

$ set | grep '^LC_\|^LANG'
LANG=C

$ ls zorglub
ls: cannot access zorglub: No such file or directory

$ env LANG=fr_CH ls zorglub   
ls: impossible d'accéder à zorglub: Aucun fichier ou dossier de ce type

$ env LANG=fr_CH.UTF-8 ls zorglub   
ls: impossible d'accéder à zorglub: Aucun fichier ou dossier de ce type

Vous noterez au passage que par convention/usage la locale ``latin 1'' n'est
pas fr_CH.LATIN-1 ni fr_CH.ISO8859-1 ni autre chose, mais ``fr_CH'' sans ``.''
(j'ai cherché;)

Pour info, afin de m'affranchir de ``prises de tête'', j'utilise *screen*
pour faire de la conversion de console, p. ex, si je veux travailler en utf-8
dans ma console xterm en iso8859-1, je procède ainsi:

$ env LANG=fr_CH.UTF8 screen -D -R
New screen...  
$ ls zorglub
ls: impossible d'accéder à zorglub: Aucun fichier ou dossier de ce type
$ 

... dans une console vidée. A present, je tapes ``Ctrl-A'', puis ``d'' (minuscule) 

la console ``disparait'' pour reprendre l'allure antérieure.
[detached from 12345.tty1]

je tapes alors (seulement):
$ screen -x

et ma console ré-apparait avec la commande ``ls'' précédement tapée, mais cette
fois, ls réponse lisible! (Magique! :-)
$ ls zorglub
ls: impossible d'accéder à zorglub: Aucun fichier ou dossier de ce type
$ 

(screen génère une nouvelle session shell, à terminer avec ``exit'' voire
 ``Ctrl-d'', à ne pas confondre ``Ctrl-A, d''! ;-)

... voila, pour faire l'inverse, à savoir ouvrir une console latin dans un
xterm utf-8:
$ env LANG=fr_CH screen -D -R
New screen...
touches: Ctrl-A, d
$ screen -x

screen est vraiement puissant!
 
--
 Félix


More information about the gull mailing list