Pesquisa de site

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.