Como alterar a codificação de texto ASCII estendido não ISO, com terminadores de linha CRLF para UTF-8?

18

Eu tenho um arquivo txt:

$ file -i x.txt
x.txt: text/plain; charset=unknown-8bit
$ file x.txt 
x.txt: Non-ISO extended-ASCII text, with CRLF line terminators

E há alguns caracteres codificados incorretamente:

trwa³y, sta³y, usuwaæ

Como posso alterar a codificação deste arquivo para UTF-8? Eu tentei o seguinte caminho até agora:

$ iconv -f ASCII -t UTF-8 x.txt
                puiconv: illegal input sequence at position 4

Talvez eu deva usar extended ASCII ( high ASCII ) mas não consiga encontrá-lo na lista de codificação de iconv .

    
por Patryk 07.01.2014 / 20:17

4 respostas

29

file informa "Texto ASCII estendido não ISO" porque detecta que isso é:

  • provavelmente um arquivo de "texto" da falta de caracteres de controle (valores de byte de 0 a 31) diferentes de quebras de linha;
  • “extended-ASCII” porque existem caracteres fora do intervalo ASCII (valores de bytes ≥128);
  • “não ISO” porque há caracteres na faixa de 128 a 159 ( ISO 8859 reserva esse intervalo para controle caracteres).

Você tem que descobrir em qual codificação esse arquivo parece estar. Você pode tentar o reconhecimento automático da Enca . Você pode precisar empurrá-lo na direção certa, dizendo em que idioma o texto é.

enca x.txt
enca -L polish x.txt

Para converter o arquivo, passe a opção -x : enca -L polish x.txt -x utf8 >x.utf8.txt

Se você não puder ou não quiser usar o Enca, poderá adivinhar a codificação manualmente. Um pouco de olhar em volta me disse que este é o texto em polonês e as palavras são trwały, stały, usuważ, então estamos procurando uma tradução em que ³ł e æż . Isso parece latin-2 ou latin-10 ou mais provável (dado" não-ISO " CP1250 que você está vendo como latin1 Para converter o arquivo para UTF-8, você pode usar < href="http://recode.progiciels-bpi.ca/index.html"> recode ou iconv .

recode CP1250..utf8 <x.txt >x.utf8.txt
iconv -f CP1250 -t UTF-8 <x.txt >x.utf8.txt
    
por 08.01.2014 / 01:42
1

Abra o arquivo de texto com o gedit e na caixa de diálogo "salvar como ..." você verá a codificação atual.

    
por 18.04.2014 / 01:06
0

Você tentou descobrir qual codificação exata é x.txt? Você receberá uma lista de codificações suportadas com

iconv --list

Às vezes acontece comigo que eu tenho uma incompatibilidade entre o latin1 e o utf8. Então, muitas vezes, ajuda a convertê-lo de volta para utf8 e vice-versa.

    
por 07.01.2014 / 23:33
0

Eu criei um script de conversão automatizado usando o enca biblioteca, Eu uso-o no meu NAS para converter legendas para UTF-8, mas poderia ser utilizado para qualquer conversão automática

Sinta-se à vontade para usar:)

EDITAR:

#!/bin/bash
LANGUAGE=czech
TO=utf8
CONVERT="enca -L $LANGUAGE -x $TO"

# Find and onvert
find ./ -type f -name "*.srt" | while read fn; do
  IS_TARGET='enca "${fn}" | egrep -ow -m 1 'UTF-8|Unrecognized|KOI8-CS2|7bit ASCII|UCS-2|Macintosh Central European''

    if [ "$IS_TARGET" != "UTF-8" ] &&
       [ "$IS_TARGET" != "UCS-2" ] &&
       [ "$IS_TARGET" != "Macintosh Central European" ] &&
       [ "$IS_TARGET" != "Unrecognized" ] &&
       [ "$IS_TARGET" != "7bit ASCII" ] &&
       [ "$IS_TARGET" != "KOI8-CS2" ]; then

        echo "${fn} ---- Will be converted!"
    # optional backup of original srt
        # cp "${fn}" "${fn}.bak"
        $CONVERT "${fn}"
    fi  

done
    
por 29.08.2016 / 14:02