Por que esse arquivo não foi convertido para UTF-8 ao usar iconv? [duplicado]

0

Versions: Linux 2.6; Bas Bash 4.1.2; iconv 2.12

A conversão ISO não retornou nenhum erro, mas o arquivo convertido ainda é exibido como US-ASCII .

Pergunta Como posso transcodificar foobar.txt para UTF-8?

$> file -bi foobar.txt
   text/plain; charset=us-ascii

$> iconv -f US-ASCII -t UTF-8 foobar.txt >  foobar_utf8.txt
iconv: illegal input sequence at position 573167

$>iconv -f ISO-8859-1 -t UTF-8 foobar.txt >  foobar_utf8.txt
$>
$> file foobar_utf8.txt
   foobar_utf8.txt: ASCII text
    
por zundarz 11.08.2016 / 22:34

1 resposta

1

ASCII é sempre UTF-8, então nenhuma conversão foi necessária - se foi ASCII.

O utilitário file não analisa o arquivo inteiro, mas apenas no início. Se for grande o suficiente, file pode ignorar um byte não-ASCII. 573167 provavelmente ultrapassou qualquer "começo" que file possa considerar.

Por outro lado, você só pode usar iconv para converter um conjunto de caracteres conhecido em UTF-8. Você pode tentar algumas escolhas prováveis, verificar se há sucesso e comparar os arquivos resultantes.

Se o arquivo é um dos sabores ISO-8859-x, por exemplo, você teria que avaliar o sucesso inspecionando o arquivo resultante. Como iconv apenas reclamou do arquivo após 573167 bytes, você pode considerar usar cut para extrair uma parte do arquivo que começa nesse deslocamento de caractere e permitir que file tente identificá-lo.

    
por 11.08.2016 / 22:39