Cygwin ou GnuWin32 fornecem ferramentas Unix como iconve dos2unix(e unix2dos). Em Unix / Linux / Cygwin, você deseja usar "windows-1252" como codificação em vez de ANSI (veja abaixo). (A menos que você saiba que seu sistema está usando uma página de código diferente de 1252 como página de código padrão, nesse caso, você precisará informar ao iconv a página de código correta da qual traduzir.)
Converta de um ( -f) para outro ( -t) com:
$ iconv -f windows-1252 -t utf-8 infile > outfile
Ou na forma de encontrar tudo e conquistar:
## this will clobber the original files!
$ find . -name '*.txt' -exec iconv --verbose -f windows-1252 -t utf-8 {} \> {} \;
Alternativamente:
## this will clobber the original files!
$ find . -name '*.txt' -exec iconv --verbose -f windows-1252 -t utf-8 -o {} {} \;
Esta pergunta foi feita várias vezes neste site, então, aqui estão algumas informações adicionais sobre "ANSI". Em resposta a uma pergunta relacionada, CesarB menciona :
Existem várias codificações chamadas "ANSI" no Windows. De fato,
ANSI é um nome impróprio . iconv não tem como adivinhar o que você deseja.
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 normalmente depende do idioma do sistema Windows. O mais comum é o CP 1252 (também conhecido como Windows-1252). Portanto, quando seu editor diz ANSI, significa "o que quer que as funções da API usem como a codificação ANSI padrão", que é a codificação não-Unicode padrão usada no seu sistema (e, portanto, geralmente a que é usada para arquivos de texto).
A página para a qual ele vincula fornece esse boato histórico (citado em um PDF da Microsoft ) sobre as origens do CP 1252 e ISO-8859-1, outra codificação frequentemente usada:
[...] isso vem do fato de que a página de código 1252 do Windows era originalmente baseada em um rascunho ANSI, que se tornou o padrão ISO 8859-1. No entanto, ao adicionar pontos de código ao intervalo reservado para códigos de controle no padrão ISO, a página de código do Windows 1252 e as páginas de código subsequentes do Windows originalmente baseadas na série ISO 8859-x se desviavam do ISO. Até hoje, não é incomum que a comunidade de desenvolvimento, dentro e fora da Microsoft, confunda a página de códigos 8859-1 com o Windows 1252, bem como consulte "ANSI" ou "A" usado para significar suporte à página de códigos do Windows .
Não use o mesmo nome de arquivo que entrada e saída! iconvparece truncar arquivos para 32.768 bytes se eles excederem esse tamanho. Como ele escreve no arquivo que ele está tentando ler, ele consegue fazer o trabalho se o arquivo é pequeno o suficiente, então ele trunca o arquivo sem qualquer aviso ...
Niavlys
1
FYI Esta questão está marcada com osx e não parece que nenhum dos comandos convert-all funcione no Yosemite ou no El Cap. A versão iconv da Apples não suporta --verbose ou -o, e a outra sintaxe de redirecionamento do stdout não funciona por algum motivo e apenas a envia para o stdout normal.
Conversão de ANSI para UTF via a sua primeira proposta não apagar todo o conteúdo do meu arquivo de texto ...
Acroneos
@ Acroneos: então você cometeu um erro: o arquivo é IN.txt, o arquivo externo é OUT.txt ... dessa forma, é impossível substituir o original. se você usou o mesmo nome de arquivo para IN.txt e OUT.txt, substitui o arquivo do qual está lendo, obviamente.
akira
O PowerShell será convertido em UTF com BOM. find e iconv pode ser muito mais fácil.
UTFCast é um conversor Unicode para Windows que suporta o modo em lote. Estou usando a versão paga e estou bastante confortável com ela.
O UTFCast é um conversor Unicode que permite converter em lote todos os arquivos de texto em codificações UTF com apenas um clique do mouse. Você pode usá-lo para converter um diretório cheio de arquivos de texto em codificações UTF, incluindo UTF-8, UTF-16 e UTF-32 em um diretório de saída, mantendo a estrutura de diretórios dos arquivos originais. Não importa se o seu arquivo de texto tem uma extensão diferente, o UTFCast pode detectar automaticamente os arquivos de texto e convertê-los.
Ah, a versão expressa (gratuita) é inútil - apenas "detecta" utf-8 WITH BOM !! (todos podem fazer isso ). Somente a versão Pro, que renova automaticamente a cada 3 meses a US $ 20 por pop, será detectada automaticamente. O preço é alto para um usuário não corporativo. E Cuidado se você tentar a versão básica, e seu arquivo já estiver em utf-8 (sem BOM), este conversor o detectará como ASCII e, em seguida, (re -) "converterá" em utf-8, o que pode resultar em sem sentido. . Esteja ciente disso antes de tentar a versão expressa! Eles têm uma versão demo para o profissional que não produz saída - IMHO sem sentido, porque não é possível verificar os resultados antes de comprar!
SherylHohman 30/01
3
Oneliner usando find, com detecção automática
A codificação de caracteres de todos os arquivos de texto correspondentes é detectada automaticamente e todos os arquivos de texto correspondentes são convertidos em utf-8codificação:
Para executar essas etapas, shé usado um sub shell -exec, executando um one-liner com o -csinalizador e passando o nome do arquivo como argumento posicional "$1"com -- {}. No meio, o utf-8arquivo de saída é nomeado temporariamente converted.
O findcomando é muito útil para tal automação de gerenciamento de arquivos.
No meu caso de uso, eu precisava de detecção automática de codificação de entrada e havia muitos arquivos com Windows-1250codificação, para os quais o comando file -bi <FILE>retorna charset=unknown-8bit. Este parâmetro não é válido para iconv.
Respostas:
Cygwin ou GnuWin32 fornecem ferramentas Unix como
iconv
edos2unix
(eunix2dos
). Em Unix / Linux / Cygwin, você deseja usar "windows-1252" como codificação em vez de ANSI (veja abaixo). (A menos que você saiba que seu sistema está usando uma página de código diferente de 1252 como página de código padrão, nesse caso, você precisará informar ao iconv a página de código correta da qual traduzir.)Converta de um (
-f
) para outro (-t
) com:Ou na forma de encontrar tudo e conquistar:
Alternativamente:
Esta pergunta foi feita várias vezes neste site, então, aqui estão algumas informações adicionais sobre "ANSI". Em resposta a uma pergunta relacionada, CesarB menciona :
A página para a qual ele vincula fornece esse boato histórico (citado em um PDF da Microsoft ) sobre as origens do CP 1252 e ISO-8859-1, outra codificação frequentemente usada:
fonte
iconv
parece truncar arquivos para 32.768 bytes se eles excederem esse tamanho. Como ele escreve no arquivo que ele está tentando ler, ele consegue fazer o trabalho se o arquivo é pequeno o suficiente, então ele trunca o arquivo sem qualquer aviso ...Com o PowerShell, você pode fazer algo assim:
enquanto ENC é algo como unicode, ascii, utf8, utf32. checkout 'arquivo de ajuda'.
Para converter todos os arquivos * .txt em um diretório para utf8, faça algo assim:
que cria uma versão convertida de cada arquivo .txt no DIR2.
EDIT: Para substituir os arquivos em todos os subdiretórios, use:
fonte
A página da Wikipedia sobre novas linhas possui uma seção sobre utilitários de conversão .
Esta parece ser sua melhor aposta para uma conversão usando apenas as ferramentas fornecidas pelo Windows:
fonte
UTFCast é um conversor Unicode para Windows que suporta o modo em lote. Estou usando a versão paga e estou bastante confortável com ela.
fonte
Oneliner usando find, com detecção automática
A codificação de caracteres de todos os arquivos de texto correspondentes é detectada automaticamente e todos os arquivos de texto correspondentes são convertidos em
utf-8
codificação:Para executar essas etapas,
sh
é usado um sub shell-exec
, executando um one-liner com o-c
sinalizador e passando o nome do arquivo como argumento posicional"$1"
com-- {}
. No meio, outf-8
arquivo de saída é nomeado temporariamenteconverted
.O
find
comando é muito útil para tal automação de gerenciamento de arquivos.Clique aqui para mais
find
abundância .fonte
iconv -f original_charset -t utf-8 originalfile > newfile
execute o comando acima no loop for.
fonte
Use este script Python: https://github.com/goerz/convert_encoding.py Ele funciona em qualquer plataforma. Requer Python 2.7.
fonte
Existe
dos2unix
no unix.Havia outra ferramenta semelhante para o Windows ( outra referência aqui ).
Como faço para converter entre arquivos de texto Unix e Windows? tem mais alguns truques
fonte
dos2unix
é útil para converter quebras de linha , mas o OP está procurando converter codificações de caracteres.Você pode usar o EncodingMaster . É grátis, possui uma versão para Windows, Linux e Mac OS X e funciona muito bem.
fonte
No meu caso de uso, eu precisava de detecção automática de codificação de entrada e havia muitos arquivos com
Windows-1250
codificação, para os quais o comandofile -bi <FILE>
retornacharset=unknown-8bit
. Este parâmetro não é válido paraiconv
.Eu tive os melhores resultados com enca .
Converta todos os arquivos com extensão txt em utf-8
fonte