Como converter um arquivo de texto com uma mistura de codificações em uma única codificação?

3
  1. Eu criei um arquivo de texto copiando suas diferentes partes de diferentes fontes (páginas da web, outros arquivos de texto, arquivos pdf) em gedit e salvando-o no arquivo. Eu acho que essa é a razão que eu tenho várias codificações no arquivo de texto, mas não tenho certeza. Como posso evite criar um arquivo de texto com codificações mistas, copiando seus diferentes partes de diferentes fontes em gedit?
  2. Sempre que eu abro o arquivo no gedit, o gedit sempre pode mostrar ou decodificar cada parte do texto corretamente. Parece que o gedit pode lidar com arquivo de texto com codificações mistas, mas não tenho certeza.

    Mas quando eu abro o arquivo no emacs, haverá personagens que não pode ser mostrado corretamente. (Eu não tenho certeza porque o emacs não pode fazer isso.) Então, eu gostaria de converter o arquivo de codificações mistas para um único codificação como utf-8.

    Como acho que o gedit pode detectar as codificações corretas para diferentes partes do arquivo de texto, e não sei se há outros aplicativos que possam fazer isso, seria possível pedir ao gedit para converter o arquivo para utf-8, ou pelo menos me diga qual codificação encontra para qual parte do arquivo?

Obrigado.

    
por Tim 27.09.2014 / 19:11

1 resposta

2

Hummm ... o conceito de um arquivo com várias codificações é um pouco instável, para ser honesto. Se você tiver um pouco de tempo, este artigo (e < Vale a pena ler este vale a pena ler.

Para o Linux, um arquivo é uma seqüência de bytes. Se você pedir a um programa para interpretá-lo como um arquivo de texto, ele fará isso usando um mapeamento entre bytes e caracteres; esse mapeamento é a codificação. Quase todo o editor de texto que eu conheço (não processadores de texto!) Apenas entende o conceito de uma codificação para um arquivo.

Eu não sou especialista em gedit ; talvez esteja fazendo alguma mágica, como tentar autodetectar a codificação linha por linha ou bloco de texto por bloco de texto ... se for o caso, você pode tentar fazer o mesmo usando enca (1):

 while read line; do echo $line | enconv -L none -x utf8; done < text.mixed > text.utf8

... mas depende de quão bom é encaixar sua codificação (funciona quase bem com o europeu oriental, mas não com o Latin1, por exemplo).

(1) Está nos repositórios, basta instalá-lo com sudo apt-get enca .

    
por Rmano 27.09.2014 / 19:53