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

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: