[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