Frequentemente encontro arquivos de texto (como arquivos de legenda em meu idioma nativo, persa ) com problemas de codificação de caracteres. Esses arquivos são criados no Windows e salvos com uma codificação inadequada (parece ANSI), que parece sem sentido e ilegível, assim:
No Windows, é possível corrigir isso facilmente usando o Notepad ++ para converter a codificação em UTF-8, como abaixo:
E o resultado legível correto é assim:
Eu procurei muito por uma solução semelhante no GNU / Linux, mas infelizmente as soluções sugeridas (por exemplo, esta pergunta ) não funcionam. Acima de tudo, eu vi pessoas sugerem iconv
e recode
mas eu não tive nenhuma sorte com essas ferramentas. Eu testei muitos comandos, incluindo os seguintes, e todos falharam:
$ recode ISO-8859-15..UTF8 file.txt
$ iconv -f ISO8859-15 -t UTF-8 file.txt > out.txt
$ iconv -f WINDOWS-1252 -t UTF-8 file.txt > out.txt
Nada disso funcionou!
Estou usando o Ubuntu-14.04 e estou procurando uma solução simples (GUI ou CLI) que funcione exatamente como o Notepad ++.
Um aspecto importante de ser "simples" é que o usuário não precisa determinar a codificação de origem; em vez disso, a codificação de origem deve ser detectada automaticamente pela ferramenta e apenas a codificação de destino deve ser fornecida pelo usuário. No entanto, também ficarei feliz em saber sobre uma solução funcional que requer que a codificação de origem seja fornecida.
Se alguém precisar de um caso de teste para examinar soluções diferentes, o exemplo acima pode ser acessado através deste link .
vim '+set fileencoding=utf-8' '+wq' file.txt
.iso-639
mas isso não parece estar disponível em umiconv
ou em outrorecode
. Pelo menos, não vejo isso na saída deiconv -l
.vim
mas ela não funcionou.Respostas:
Esses arquivos do Windows com texto em persa são codificados no Windows-1256 . Portanto, pode ser decifrado por comando semelhante ao OP experimentado, mas com conjuntos de caracteres diferentes. Nomeadamente:
recode Windows-1256..UTF-8 <Windows_file.txt > UTF8_file.txt
(denunciado pelas reclamações do pôster original; ver comentários)
Este assume que a variável de ambiente LANG está configurada para um código de idioma UTF-8. Para converter para qualquer codificação (UTF-8 ou outra), independentemente da localidade atual, pode-se dizer:
O pôster original também é confundido com a semântica de ferramentas de recodificação de texto (recode, iconv). Para codificação de origem ( source
..
ou -f), é necessário especificar a codificação com a qual o arquivo é salvo (pelo programa que o criou). Não há algumas suposições (ingênuas) baseadas em caracteres mojibake em programas que tentam (mas falham) lê-lo. Tentar o ISO-8859-15 ou o WINDOWS-1252 para um texto em persa era obviamente um impasse: essas codificações simplesmente não contêm nenhuma letra em persa.fonte
iconv
) funcionou. Mas o primeiro (usandorecode
) não funcionou corretamente e a saída ainda era sem sentido. Edite sua resposta para incluir apenas oiconv
comando e eu a marcarei como resposta.iconv -f WINDOWS-1256 -t UTF-8 in.txt > out.txt
que eu testei e trabalhei. Portanto, pode ser uma boa ideia editar seu comando assim.Além disso
iconv
, que é uma ferramenta muito útil, por si só ou em um script, há uma solução realmente simples que achei tentando descobrir o mesmo problema para os conjuntos de caracteres gregos (Windows-1253 + ISO-8859-7).Tudo que você precisa fazer é abrir o arquivo de texto na caixa de diálogo "Abrir" do Gedit e não clicando duas vezes nele . Na parte inferior da caixa de diálogo, há um menu suspenso para Codificação, definido como "Detectado automaticamente" . Altere para "Windows-125x" ou outro conjunto de códigos adequado e o texto ficará perfeitamente legível no Gedit. Você pode salvá-lo usando a codificação UTF-8, apenas para ter certeza de que não terá o mesmo problema novamente no futuro ...
fonte
Como solução complementar para o problema, preparei um script Bash útil com base no
iconv
comando da resposta de Incnis Mrsi :Salve este script como
fix-encoding.sh
, dê permissão para executar usandochmod +x fix-encoding.sh
e use-o assim:Este script tentará corrigir a codificação de qualquer número de arquivos fornecidos como entrada. Observe que os arquivos serão corrigidos no local, portanto o conteúdo será substituído.
fonte
Não sei se isso funciona com o Farsi: uso o Gedit, ocorre uma falha na codificação incorreta e posso escolher o que quero traduzir para UTF-8, era apenas um formato de texto sem iluminação, mas aqui está uma captura de tela !
Desculpe, finalmente cheguei aos meus arquivos de texto, agora eles estão todos convertidos.
Também adorei o bloco de notas ++, ainda sinto falta.
fonte
Se você gosta de trabalhar na GUI em vez da CLI, como eu:
fonte
A solução que encontrei foi usar o editor de texto Microsoft Visual Studio Code , que é gratuito e está disponível para Linux.
Abra o arquivo que você deseja converter sua codificação no VS-Code. Na parte inferior da janela, existem alguns botões. Um deles está relacionado à codificação do arquivo, como mostrado abaixo:
Clicar neste botão exibe um menu superior que inclui dois itens. Nesse menu, selecione a opção "Reabrir com codificação", como abaixo:
Isso abrirá outro menu que inclui uma lista de codificação diferente, como mostrado abaixo. Agora selecione "Árabe (Windows 1256)":
Isso corrigirá o texto sem sentido como este:
Agora clique no botão de codificação novamente e desta vez selecione a opção "Salvar com codificação", como abaixo:
E no novo menu, selecione a opção "UTF-8":
Isso salvará o arquivo corrigido usando a codificação UTF-8:
Feito!
:)
fonte