iconv sequência de entrada ilegal - por quê?

11

Ao tentar converter um arquivo de texto em seu equivalente ASCII, recebo uma mensagem de erro de que iconv: illegal input sequence at position .

O comando que eu uso é iconv -f UTF-8 -t ascii//TRANSLIT file

O caractere incorreto é æ .

O arquivo de texto está presente aqui .

Por que isso diz seqüência ilegal? O caractere de entrada é o caractere UTF-8 adequado (U + 00E6).

    
por user13107 09.07.2014 / 15:53

2 respostas

14

O arquivo está codificado em ISO-8859-1, não em UTF-8:

$ hd 0606461.txt | grep -B1 '^0002c520'
0002c510  64 75 6d 20 66 65 72 69  65 6e 74 20 72 75 69 6e  |dum ferient ruin|
0002c520  e6 0d 0a 2d 2d 48 6f 72  61 63 65 2e 0d 0a 0d 0a  |...--Horace.....|

E o byte "e6" sozinho não é uma sequência UTF-8 válida.

Então, use iconv -f latin1 -t ascii//TRANSLIT file .

    
por 09.07.2014 / 17:15
4

O arquivo vinculado parece ser UTF-8 dentro de um documento HTML

$ file 0606461.txt 
0606461.txt: HTML document, ASCII text, with CRLF line terminators

Se você executá-lo por meio de um conversor de HTML para texto primeiro, por exemplo,

iconv -f UTF-8 -t ascii//TRANSLIT < <(html2text 0606461.txt)

O fragmento UTF-8 com o qual você parece ter problemas parece transliterar sem erro, por exemplo

Si fractus illabatur orbis.
Impavidum ferient ruinæ
--Horace.

torna-se

Si fractus illabatur orbis.
Impavidum ferient ruinae
--Horace.

O utilitário html2text pode não estar instalado em seu sistema - se você não conseguir localizar / instalar, existem outros conversores, incluindo um módulo python.

    
por 09.07.2014 / 16:22