Re: [HS] encoding avec sed
Jean-Michel OLTRA a écrit, samedi 6 décembre 2008, à 12:17 :
> Bonjour,
bonsoir,
> Un HS, mais je ne m'explique pas le comportement de sed.
>
> Sur un fichier encodé en utf-8, je veux remplacer les espaces insécables
> par de véritables espaces :
>
> sed -i 's/\xa0/\x20/g' fichier.sql
Comme te l'a dit Sylvain, tu ne remplaces que le second octet de la
paire codant l'espace insécable en UTF-8.
> 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.
Ou tout autre codage compatible...
> 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).
Si ton terminal est en UTF-8, tu aurais dû taper l'espace insécable dans
la substitution...
En complément à ceux de Sylvain, quelques essais en environnement latin1 :
~ $ cat texte
ascii pur sucre
espace normal
espace insecable (sans accent ;)
çédille latin1
~ $ recode ..utf8 <texte >texte_utf8
~ $ sed -i -e 's/latin1/UTF-8/' texte_utf8
~ $ diff texte texte_utf8
3,4c3,4
< espace insecable (sans accent ;)
< çédille latin1
---
> espace insecable (sans accent ;)
> çédille UTF-8
# remplacer l'octet :
~ $ sed -e 's/\xa0/_/g' texte texte_utf8
ascii pur sucre
espace normal
espace_insecable (sans accent ;)
çédille latin1
ascii pur sucre
espace normal
espaceÂ_insecable (sans accent ;)
çédille UTF-8
# Remplacer la paire UTF-8
# (on pourrait taper  au lieu de \xc2 ...)
~ $ sed -e 's/\xc2\xa0/_/g' texte texte_utf8
ascii pur sucre
espace normal
espace insecable (sans accent ;)
çédille latin1
ascii pur sucre
espace normal
espace_insecable (sans accent ;)
çédille UTF-8
# et pour traiter latin et utf8 ensemble,
~ $ sed -e 's/\xc2\?\xa0/_/g' texte texte_utf8
ascii pur sucre
espace normal
espace_insecable (sans accent ;)
çédille latin1
ascii pur sucre
espace normal
espace_insecable (sans accent ;)
çédille UTF-8
--
Jacques L'helgoualc'h
Reply to: