Parece que você tinha o texto codificado em utf-8 (isso é bom, já que é o padrão para o Unix), mas algo o lê como o ISO 8859-1 / Microsoft® windows Latin-1 e depois saída é interpretação. Você precisa reverter isso.
por exemplo,
echo "passer de très bonnes fêtes de fin d'année" | iconv --to-code="ISO 8859-1"
Isso levará a codificação quebrada e a converterá em utf-8 válido. Se o seu sistema estiver configurado para utf-8, ele será lido corretamente.
Explicação:
Se fizermos echo è | od -t x1
e echo ê | od -t x1
, então veremos que os códigos hexadecimais são c3 a8 0a
e c3 aa 0a
, então olhamos aqui link (estes são códigos iso 8859-1, não ascii) vemos que esses códigos dão è
e ê
ambos seguidos por um caractere invisível. Então agora sabemos o que deu errado: alguma coisa leu utf-8, mas interpretou como iso 8859-1. Então, precisamos agora revertê-lo: lemos em cada formato que estamos lendo e convertemos para iso 8859-1 (o inverso do que nos trouxe até aqui). O resultado é válido utf-8.