Qual é a ferramenta ou o método mais rápido e fácil para converter arquivos de texto entre conjuntos de caracteres?
Especificamente, preciso converter de UTF-8 para ISO-8859-15 e vice-versa.
Tudo funciona: one-liners na sua linguagem de script favorita, ferramentas de linha de comando ou outros utilitários para SO, sites da Web etc.
Melhores soluções até agora:
No Linux / UNIX / OS X / cygwin:
O gnu iconv sugerido por Troels Arvin é melhor usado como filtro . Parece estar universalmente disponível. Exemplo:
$ iconv -f UTF-8 -t ISO-8859-15 in.txt > out.txt
Como apontado por Ben , há um conversor online usando o iconv .
A recodificação de Gnu ( manual ) sugerida pela Cheekysoft converterá um ou vários arquivos no local . Exemplo:
$ recode UTF8..ISO-8859-15 in.txt
Este usa aliases mais curtos:
$ recode utf8..l9 in.txt
O Recode também suporta superfícies que podem ser usadas para converter entre diferentes tipos de final de linha e codificações:
Converta novas linhas de LF (Unix) para CR-LF (DOS):
$ recode ../CR-LF in.txt
Arquivo de codificação Base64:
$ recode ../Base64 in.txt
Você também pode combiná-los.
Converta um arquivo UTF8 codificado em Base64 com finais de linha Unix em arquivo Latin 1 codificado em Base64 com finais de linha Dos:
$ recode utf8/Base64..l1/CR-LF/Base64 file.txt
No Windows com Powershell ( Jay Bazuzi ):
PS C:\> gc -en utf8 in.txt | Out-File -en ascii out.txt
(No entanto, não há suporte ISO-8859-15; ele diz que os conjuntos de caracteres suportados são unicode, utf7, utf8, utf32, ascii, bigendianunicode, padrão e oem.)
Editar
Você quer dizer suporte iso-8859-1? O uso de "String" faz isso, por exemplo, vice-versa
gc -en string in.txt | Out-File -en utf8 out.txt
Nota: Os possíveis valores de enumeração são "Desconhecido, String, Unicode, Byte, BigEndianUnicode, UTF8, UTF7, Ascii".
- CsCvt - O Kalytta's Character Set Converter é outra ótima ferramenta de conversão baseada em linha de comando para Windows.
fonte
gc -en Ascii readme.html | Out-File -en UTF8 readme.html
mas ele converte o arquivo para utf-8, mas então está vazio! O Notepad ++ diz que o arquivo é no formato Ansi, mas a leitura que eu entendo não é mesmo um conjunto de caracteres válido? uk.answers.yahoo.com/question/index?qid=20100927014115AAiRExFrecode
irá funcionar como um filtro, bem como se você não passar quaisquer nomes de arquivos, por exemplo:recode utf8..l9 < in.txt > out.txt
enca
, não precisará especificar a codificação de entrada. Muitas vezes, é suficiente apenas para especificar o idioma:enca -L ru -x utf8 FILE.TXT
.iconv -f UTF-32 -t UTF-8 input.csv > output.csv
apenas 770 mil linhas salvas, apenas um terço. O uso da versão localiconv -f UTF-32 -t UTF-8 file.csv
converteu com êxito todos os mais de 2 milhões de linhas.Respostas:
Abordagem de utilitário independente
Você não precisa especificar nenhum desses argumentos. Eles usarão como padrão o código de idioma atual, que geralmente é UTF-8.
fonte
iconv -l | grep UTF
mostrará todas as codificações relacionadas a UTF que sua cópia do iconv suporta.chardet in.txt
para gerar uma melhor estimativa. O resultado pode ser usado como ENCODING iniconv -f ENCODING
.illegal input sequence at position
mensagens), e substituir caracteres "estranhos" com personagens "semelhantes":iconv -c -f UTF-8 -t ISO-8859-1//TRANSLIT in.txt > out.txt
.ex
) abaixo . Informações adicionais: (1) você (provavelmente) não precisa especificar a-f
opção (de) comiconv
. (2) ofile --mime-encoding <file/s>
comando pode ajudá-lo a descobrir a codificação em primeiro lugar.file
comando relatou minha fonte como UTF-16 Little Endian; executandoiconv -f UTF-16 -t UTF-8...
transformou-o incorretamente para ASCII, eu tive que especificar explicitamenteiconv -f UTF-16LE...
a saída UTF-8 #Experimente o VIM
Se você tiver,
vim
pode usar isto:Não testado para todas as codificações.
A parte legal disso é que você não precisa saber a codificação da fonte
Esteja ciente de que este comando modifica diretamente o arquivo
Parte de explicação!
+
: Usado pelo vim para inserir diretamente o comando ao abrir um arquivo. Geralmente usado para abrir um arquivo em uma linha específica:vim +14 file.txt
|
: Separador de vários comandos (como;
no bash)set nobomb
: nenhuma lista técnica utf-8set fenc=utf8
: Defina a nova codificação como link de documento utf-8x
: Salvar e fechar arquivofilename.txt
: caminho para o arquivo"
: qotes estão aqui por causa de tubos. (caso contrário, o bash os usará como pipe do bash)fonte
vim -b
ouhead file.txt|cat -e
find -regextype posix-extended -type f -regex ".*\.(h|cpp|rc|fx|cs|props|xaml)" -exec vim +'set nobomb | set fenc=utf8 | x' {} \;
No Linux, você pode usar o poderoso comando recode para tentar converter entre os diferentes conjuntos de caracteres, bem como quaisquer problemas de final de linha. recode -l mostrará todos os formatos e codificações que a ferramenta pode converter. É provável que seja uma lista MUITO longa.
fonte
LF
? Existe/CR
e/CR-LF
não existe/LF
iconv (1)
Também existem ferramentas baseadas em iconv em vários idiomas.
fonte
A versão mais curta, se você puder assumir que a BOM de entrada está correta:
fonte
gc .\file-utf8.txt | sc -en utf7 .\file-utf7.txt
Set-Content
funciona melhor do queOut-File
?file-utf8.txt
arquivo para entrada, pois ambas tinham o mesmo arquivo de saídafile-utf7.txt
.gc -en Ascii readme.html | Out-File -en UTF8 readme.html
mas ele converte o arquivo para utf-8, mas então está vazio! O Notepad ++ diz que o arquivo é no formato Ansi, mas a leitura que eu entendo não é mesmo um conjunto de caracteres válido? uk.answers.yahoo.com/question/index?qid=20100927014115AAiRExFExperimente a função iconv Bash
Eu coloquei isso em
.bashrc
:..para poder converter arquivos assim:
fonte

no início do arquivo.Experimente o Notepad ++
No Windows, pude usar o Notepad ++ para fazer a conversão de ISO-8859-1 para UTF-8 . Clique
"Encoding"
e depois"Convert to UTF-8"
.fonte
Oneliner usando find, com detecção automática de conjunto de caracteres
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, um sub shell
sh
é usado-exec
, executando uma linha com o-c
sinalizador e passando o nome do arquivo como argumento posicional"$1"
com-- {}
. Nesse meio tempo, outf-8
arquivo de saída é nomeado temporariamenteconverted
.Pelo que
file -bi
significa:-b
,--brief
Não adicione nomes de arquivos às linhas de saída (modo breve).-i
,--mime
Faz com que o comando file produza seqüências de caracteres do tipo MIME, em vez das legíveis por humanos mais tradicionais. Assim, pode dizer, por exemplo,text/plain; charset=us-ascii
e nãoASCII text
. Osed
comando corta isso para apenasus-ascii
conforme exigido poriconv
.O
find
comando é muito útil para essa automação de gerenciamento de arquivos. Clique aqui para maisfind
galore .fonte
find . -type f -iname *.txt -exec sh -c 'iconv -f $(file -b --mime-encoding "$1" | awk "{print toupper(\$0)}") -t UTF-8 > converted "$1" && mv converted "$1"' -- {} \;
sed
comando existe de propósito, permitindo a detecção automática da codificação de caracteres. Eu ampliei a resposta para explicar isso agora. Seria cortês com relação aos leitores excluir quaisquer comentários irrelevantes restantes. Obrigado.PHP iconv ()
iconv("UTF-8", "ISO-8859-15", $input);
fonte
DOS / Windows: use a página de códigos
O comando
chcp
pode ser usado para alterar a página de código. Página de códigos 65001 é o nome da Microsoft para UTF-8. Após definir a página de códigos, a saída gerada pelos seguintes comandos será do conjunto de páginas de códigos.fonte
para escrever o arquivo de propriedades (Java) normalmente eu uso isso no linux (distribuições mint e ubuntu):
Por exemplo:
PS: Escrevi a Execução número um / dois em português para forçar caracteres especiais.
No meu caso, na primeira execução, recebi esta mensagem:
Quando instalei a primeira opção (gcj-5-jdk), o problema estava concluído.
Espero que isso ajude alguém.
fonte
Com rubi:
Fonte: https://robots.thoughtbot.com/fight-back-utf-8-invalid-byte-sequences
fonte
Use este script Python: https://github.com/goerz/convert_encoding.py Funciona em qualquer plataforma. Requer Python 2.7.
fonte
Minha ferramenta favorita para isso é o Jedit (um editor de texto baseado em java), que possui dois recursos muito convenientes:
fonte
Simplesmente altere a codificação do arquivo carregado no IntelliJ IDEA IDE, à direita da barra de status (inferior), onde o conjunto de caracteres atual é indicado. Solicita recarregar ou converter, use Converter. Faça backup do arquivo original com antecedência.
fonte
Se os aplicativos da interface do usuário do macOS são a sua cara , o SubEthaEdit é o editor de texto para o qual eu costumo ir para a codificação-disputa - sua "visualização de conversão" permite que você veja todos os caracteres inválidos na codificação de saída e corrija / remova-os.
E é de código aberto agora, então sim para eles 😉.
fonte
Conforme descrito em Como corrijo a codificação de caracteres de um arquivo? Synalyze It! permite converter facilmente no OS X entre todas as codificações suportadas pela biblioteca ICU .
Além disso, você pode exibir alguns bytes de um arquivo traduzido para Unicode a partir de todas as codificações para ver rapidamente qual é o correto para o seu arquivo.
fonte