Como converter arquivos para codificação UTF-8 no Linux
Neste guia, descreveremos o que é codificação de caracteres e abordaremos alguns exemplos de conversão de arquivos de uma codificação de caracteres para outra usando uma ferramenta de linha de comando. Finalmente, veremos como converter vários arquivos de qualquer conjunto de caracteres (charset) para a codificação UTF-8 no Linux.
Como você provavelmente já deve ter em mente, um computador não entende nem armazena letras, números ou qualquer outra coisa que nós, como humanos, possamos perceber, exceto bits. Um bit tem apenas dois valores possíveis, ou seja, 0
ou 1
, true
ou false
, sim
ou não
. Todas as outras coisas, como letras, números e imagens, devem ser representadas em bits para um computador processar.
Em termos simples, codificação de caracteres é uma forma de informar ao computador como interpretar zeros e uns brutos em caracteres reais, onde um caractere é representado por um conjunto de números. Quando digitamos texto em um arquivo, as palavras e frases que formamos são compostas de caracteres diferentes e os caracteres são organizados em um conjunto de caracteres.
Existem vários esquemas de codificação, como ASCII, ANSI, Unicode entre outros. Abaixo está um exemplo de codificação ASCII.
Character bits
A 01000001
B 01000010
No Linux, a ferramenta de linha de comando iconv é usada para converter texto de uma forma de codificação para outra.
Você pode verificar a codificação de um arquivo usando o comando file, usando o sinalizador -i
ou --mime
que permite a impressão do tipo mime string como nos exemplos abaixo:
file -i Car.java
file -i CarDriver.java
A sintaxe para usar iconv é a seguinte:
iconv option
iconv options -f from-encoding -t to-encoding inputfile(s) -o outputfile
Onde -f
ou --from-code
significa codificação de entrada e -t
ou --to-encoding
especifica codificação de saída.
Para listar todos os conjuntos de caracteres codificados conhecidos, execute o comando abaixo:
iconv -l
Converter arquivos de codificação UTF-8 para ASCII
A seguir, aprenderemos como converter de um esquema de codificação para outro. O comando abaixo converte da codificação ISO-8859-1 para UTF-8.
Considere um arquivo chamado input.file
que contém os caracteres:
� � � �
Vamos começar verificando a codificação dos caracteres do arquivo e depois visualizar o conteúdo do arquivo. De perto, podemos converter todos os caracteres para a codificação ASCII.
Após executar o comando iconv, verificamos o conteúdo do arquivo de saída e a nova codificação dos caracteres conforme abaixo.
file -i input.file
cat input.file
iconv -f ISO-8859-1 -t UTF-8//TRANSLIT input.file -o out.file
cat out.file
file -i out.file
Nota: Caso a string //IGNORE
seja adicionada à codificação, caracteres que não podem ser convertidos e um erro serão exibidos após a conversão.
Novamente, supondo que a string //TRANSLIT
seja adicionada à codificação como no exemplo acima (ASCII//TRANSLIT), os caracteres sendo convertidos serão transliterados conforme necessário e, se possível . O que implica que caso um caractere não possa ser representado no conjunto de caracteres de destino, ele pode ser aproximado por meio de um ou mais caracteres de aparência semelhante.
Consequentemente, qualquer caractere que não possa ser transliterado e que não esteja no conjunto de caracteres de destino será substituído por um ponto de interrogação (?)
na saída.
Converter vários arquivos para codificação UTF-8
Voltando ao nosso tópico principal, para converter vários ou todos os arquivos em um diretório para a codificação UTF-8, você pode escrever um pequeno script de shell chamado encoding.sh da seguinte forma:
#!/bin/bash
#enter input encoding here
FROM_ENCODING="value_here"
#output encoding(UTF-8)
TO_ENCODING="UTF-8"
#convert
CONVERT=" iconv -f $FROM_ENCODING -t $TO_ENCODING"
#loop to convert multiple files
for file in *.txt; do
$CONVERT "$file" -o "${file%.txt}.utf8.converted"
done
exit 0
Salve o arquivo e torne o script executável. Execute-o no diretório onde seus arquivos (*.txt
) estão localizados.
chmod +x encoding.sh
./encoding.sh
Importante: Você também pode usar este script para conversão geral de vários arquivos de uma determinada codificação para outra, simplesmente brinque com os valores de FROM_ENCODING
e TO_ENCODING
, sem esquecer o nome do arquivo de saída "$ {file%.txt}.utf8.converted"
.
Para obter mais informações, consulte a página de manual iconv.
man iconv
Para resumir este guia, compreender a codificação e como converter de um esquema de codificação de caracteres para outro é um conhecimento necessário para todo usuário de computador, ainda mais para programadores quando se trata de lidar com texto.
Por último, você pode entrar em contato conosco usando a seção de comentários abaixo para qualquer dúvida ou feedback.