converte o tipo de arquivo para utf-8 no unix - iconv está falhando [duplicado]

6

Possible Duplicates:
Batch-convert files for encoding or line ending under Windows
How can I convert multiple files to UTF-8 encoding using *nix command line tools?

Eu tenho um arquivo php na minha máquina windows que, ao passar para o * nix com o winSCP, não mostra os caracteres corretamente.

Eu arrastei o arquivo de volta da máquina linux para o windows e verifiquei a codificação com o Notepad ++, e ele diz ANSI.

Então eu tentei o iconv -f ANSI -t utf-8 nome_do_arquivo.php > nome_do_arquivo.php, mas recebo um erro que a conversão ANSI não é suportada. Eu também tentei MS_ANSI, e não recebo nenhum erro, mas eu também não recebo o arquivo mostrando a codificação adequada.

Eu abro o arquivo com o winSCP para ver como fica, e muitos caracteres especiais aparecem como '?'. Como o propósito do script é remover esses caracteres especiais dos meus dados, isso está realmente causando um pequeno problema.

Existe outra ferramenta para alterar a codificação? Eu tentei yum iconv, mas obter uma resposta sem pacote disponível.

Como você converteria esse arquivo para a codificação correta?

    
por pedalpete 24.08.2009 / 07:15

4 respostas

5

Eu tenho problemas semelhantes com hashes MD5 criados no Windows XP (sob o Cygwin), salvos em um arquivo e depois copiados para um sistema Linux onde os hashes são computados para verificação de cópia. Se o nome de um arquivo que está sendo hash contém caracteres não-ASCII, o md5sum relata o arquivo que está faltando, porque ele não está decodificando o nome do arquivo corretamente. No entanto, se eu abrir o arquivo de texto contendo os hashes no Bloco de Notas e alterar a codificação de ANSI para UTF-8, o md5sum do Linux obterá a codificação correta.

ANSI não é realmente uma codificação adequada (para qualquer pessoa, exceto para a Microsoft), e é por isso que o iconv não está percebendo isso. Você pode sair do windows-1252 , mas não há garantia de que sempre funcionará:

iconv -f windows-1252 -t utf-8 filename.from > filename.to

Para o registro, arquivo me dá isso em um desses arquivos de texto MD5:

$ file tequila.ansi.txt
tequila.ansi.txt: ISO-8859 text
    
por 30.09.2009 / 19:43
1

Tem certeza de que "ANSI" é o nome correto de codificação / entrada de caracteres para iconv? Você pode tentar rodar o "arquivo filename.php", muitas vezes o arquivo irá informar (o que ele acha) a codificação. Você também pode tentar não especificar a codificação from ao fazer a conversão ou tentar todas elas:

for i in 'iconv -l'; do iconv -f $i -t utf-8 filename.php > filename.php.$i; done
    
por 24.08.2009 / 13:09
1

Você poderia convertê-lo para UTF-8 com o Notepad ++.

    
por 14.09.2009 / 20:54
1

Existem várias codificações que são chamadas "ANSI" no Windows. Na verdade, ANSI é um equívoco . iconv não tem como adivinhar o que você quer.

A codificação ANSI é a codificação usada pelas funções "A" na API do Windows (as funções "W" usam UTF-16). Qual codificação corresponde geralmente depende do idioma do seu sistema Windows. O mais comum é o CP 1252 (também conhecido como Windows-1252). Então, quando o seu editor diz ANSI, significa “o que as funções da API usam como padrão de codificação ANSI”, que é a codificação não-Unicode padrão usada em seu sistema (e, geralmente, aquela que é usada para arquivos de texto).

Então, para converter o arquivo corretamente, você deve primeiro descobrir qual é a codificação "ANSI" para o seu sistema Windows (ou simplesmente pedir ao seu editor de texto para salvar usando uma codificação específica).

    
por 30.09.2009 / 20:52

Tags