[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: [HS] encoding avec sed



    Bonjour,


Le samedi 06 décembre 2008, Sylvain Sauvage a écrit...


> > sed -i 's/\xa0/\x20/g' fichier.sql
> > 
> > Mais en réalité, l'espace insécable est bien remplacée, mais
> > il y a un  avant, et le fichier est encodé en latin1.

>   Euh, c’est pas très clair. Le fichier de départ est en utf-8
> et le fichier d’arrivée en latin1 ?

Oui, mais je me base sur vim pour avoir l'encodage (:set fileencoding?) 
et le code du caractère (ga). Et l'encodage utf-8 est différent
d'unicode, qui est juste une norme de représentation

>   Déjà, si le fichier de départ est en utf-8, alors l’espace
> insécable est \xc2\xa0, pas \xa0. \xa0 n’est pas un caractère
> utf-8.

Voilà l'erreur. Vim me donne 00a0 pour l'espace insécable. Mais :
http://fr.wikipedia.org/wiki/Table_des_caract%C3%A8res_Unicode_(0000-0FFF)#Latin_basique
donne bien 00a0 pour nbsp en Unicode

>   Ensuite, si tu enlèves \xa0 sans enlever \xc2, alors le
> fichier n’est plus valide vis à vis de l’utf-8 (\xc2\x20 n’est
> pas un caractère utf-8 : aucun caractère ascii ne doit / peut
> apparaître comme partie d’un autre caractère). Et si ce n’est
> plus de l’utf-8, c’est considéré comme du latinX…

C'est ce qui doit se passer, puisqu'il reste, pour vim \xc2 et il
m'affiche «Â » (Â qui serait 00c2 en unicode suivi d'une espace.

En fait vim m'affiche l'encodage utf-8, mais me donne le code hexa du
caractère en unicode, et pas en utf-8, donc la substitution ne se passe
pas comme je le vois, puisque je me base sur ce qu'il me donne avec la
combinaison de touches ga.

> > Si le fichier est en latin1 avant la substitution, l'espace est
> > remplacée, et le fichier est converti en utf-8, ce que je
> > trouve normal vu que le terminal l'est également (peut-être
> > qu'il n'y a pas de rapport).

>   Hmm, pas chez moi :

> [on reprend avec un bla tout neuf]
> $ recode u8..l9 bla

> $ file bla
> bla: ISO-8859 text

> $ sed -i -e 's/\xa0/\x20/g' bla

> $ file bla
> bla: ISO-8859 text

Si je fais le :
sed -i 's/\xc3\xa0/\x20/g' sur un fichier utf-8 (selon vim), `file` me
le donne en utf-8 unicode text avant la substitution. Après la
substitution, `file` me le donne en ASCII text, alors que vim me le
donne bien en encodage utf-8

Merci de ton éclairage.

-- 
jm

A.E.L. Sarl (R.C.S CASTRES 490843240)
http://www.spidboutic.fr



Reply to: