Re: [HS] encoding avec sed
Bonjour,
> 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
en UTF-8, un blanc non-sécable, ça utilise 2 octets (c2a0)
http://www.fileformat.info/info/unicode/char/00a0/index.htm
D'ailleurs:
echo -n "### ###" > test
hexdump test -C
00000000 23 23 23 c2 a0 23 23 23 |###..###|
On vois bien qu'il y a 2 octets (évidemment il fallait taper Alt-Espace
entre les caractère "#")
Donc:
sed -i 's/\xc2\xa0/ /g' test
> 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.
Ce que tu as fait c'est de remplacer la séquence d'octet "c2a0" (qui est
un blanc insécable) par la séquence "20a0".
On se retrouve avec \x20 est effectivement un blanc "normal", précédé de
l'octet "\xc2".
Ton éditeur de texte se retrouve avec une séquence d'octets qui n'est
pas valide en UTF-8 (un octet entre \xC2 et \xDF doit être suivi de deux
octets compris entre \x80 et \xBF voir [2])... du coup, ton editeur
continue d'essayer de détecter l'encodage, et choisi latin1, dans ton
cas précis.
Franklin
[2] http://www.fileformat.info/info/unicode/utf8.htm
Reply to: