Pular para o conteúdo

Consertando codificação de arquivos - UTF-8 x ISO-8859-1

Dica publicada em Linux / Comandos
Fernando phoemur
Hits: 94.496 Categoria: Linux Subcategoria: Comandos
  • Indicar
  • Impressora
  • Denunciar

Consertando codificação de arquivos - UTF-8 x ISO-8859-1

Dica baseada no tópico:
Após o que foi discutido no tópico acima, resolvi publicar esta dica pois tem sido uma coisa muito útil para mim.

Um problema muito frequente acontece quando importamos arquivos de outros sistemas operacionais ou de outras distribuições GNU/Linux que têm a codificação de caracteres configurada de maneira diferente. Geralmente o conteúdo e o nome dos arquivos ficam todos bagunçados quando há caracteres especiais (acentos, cedilha, etc...)

Mais ou menos assim:

ls
apresentação.ppt cotação.sh documentação.odt funções.sh
Se você não quiser mudar a configuração do seu locale apenas por causa de meia dúzia de arquivos, há como fazer a conversão. O Windows geralmente usa a codificação ISO-8859-1 e o GNU/Linux pode usar o que quiser, mas ultimamente UTF-8 é mais comum.

Para converter o conteúdo em texto dos arquivos você pode usar a ferramenta iconv, cuja sintaxe é:

iconv -f [codificação de origem] -t [codificação de destino] arquivo > arquivo.new

Para descobrir a codificação de origem pode-se usar a ferramenta file, exemplo:

file [arquivo]

Exemplo de conversão de ISO-8859-1 para UTF-8:

iconv -f iso-8859-1 -t utf-8 arquivo.txt > arquivo_novo.txt

Uma dica importante é não usar o mesmo nome de arquivo na entrada e na saída, pois assim você vai perder seus dados... Crie um novo arquivo, verifique se está tudo certo e somente depois sobrescreva o arquivo original.

Contudo, o iconv não muda o nome do arquivo, ele apenas faz a conversão do conteúdo dos arquivos ou de stdin... Dessa forma ficamos com o nome do arquivo todo estragado...

Renomeando os arquivos

A maneira mais fácil de consertar o nome dos arquivos é usando a ferramenta convmv.

Instala-se de acordo com o gerenciador de pacotes de sua distribuição:

# apt-get install convmv
# sbopkg -i convmv
# emerge --ask app-text/convmv
# yum install convmv
# pacman -Sy convmv
# Repositório extra
(...)

Ou então pelos fontes aqui.

Dito isso, mão à obra. Para usar:

convmv -f [codificação de origem] -t [codificação de destino] --notest arquivo

Se quiser apenas testar sem efetivar a mudança rode o comando sem --notest.

Exemplos:

Renomeando todos os arquivos do diretório atual de ISO-8859-1 para UTF-8:

convmv -f iso-8859-1 -t utf-8 --notest *

Renomeando todos os arquivos MP3 da pasta /home/musicas (incluindo as subpastas usando o find), de ISO-8859-1 para UTF-8:

find /home/musicas -iname *.mp3 -type f -exec convmv -f iso-8859-1 -t utf-8 --notest {} \;

Contudo, se não quiser instalar o convmv, dá pra fazer um malabarismo usando o iconv, laços e pipes:

Renomeando todos os arquivos do diretório atual de ISO-8859-1 para UTF-8:

for i in $(ls -w1 *); do mv "$i" "$(echo $i | iconv -f iso-8859-1 -t utf-8)"; done

Renomeando todos os arquivos MP3 da pasta /home/musicas (incluindo as subpastas, usando o find), de ISO-8859-1 para UTF-8:

find /home/musicas -iname *.mp3 -type f | while read line; do mv "$line" "$(echo $line | iconv -f iso-8859-1 -t utf-8)"; done

E por fim talvez a dica mais importante, que é deixar todos os sistemas operacionais que você usa com a mesma codificação de caracteres (se possível), para que você não tenha que se preocupar com esse tipo de conversão com frequência.

Abraços, espero ter ajudado.

Bloqueando acesso ao servidor a utilizadores do TOR

Como utilizar os SlackBuilds 14.1 no seu sbopkg

MPlayer - Como utilizar sem bloquear o prompt

Não se esqueça do IPv6 no seu Firewall

MATE Desktop no Slackware - Compilação

openSUSE - Como remover versões antigas do kernel

Usando o comando echo para obter informações do sistema

Google Authenticator no terminal Linux

Resolvendo o erro: Sub-processo gzip retornou um código de erro (1)

Finalizando programas através de um terminal

#1 Comentário enviado por lcavalheiro em 10/06/2013 - 12:55h
Bom que se diga, esta dica serve para qualquer arquivo que precise ter seu nome convertido. Excelente, chapinha!
#2 Comentário enviado por albfneto em 10/06/2013 - 15:57h
é boa essa Dica. funciona em linux geral. Favoritada, nunca tive o problema mas guardei a dica, posso precisar um dia.
#3 Comentário enviado por JJSantos em 16/06/2013 - 05:03h
Favoritada.
t+
#4 Comentário enviado por tarcisiopraciano em 26/04/2016 - 22:53h
Funcionou muito a dica apenas completando, com iconv -l se pode obter a lista das codificações conhecidas onde achei ISO_8859-15 que era o meu caso. Também fiz de modo ligeiramente
diferente. E mais divertida... e porque ainda apanho usando comandos do bash...
1) ls *.c > converte ## listagem dos programas em *.c no arquivo converte
2) ls *.h >> converte ## listagem das bibliotecas *.h no arquivo converte
3) com joe, fiz cópia da listagem e na segunda troquei o nome dos arquivos colocando " > novo"
na frente
4) com joe no modo bloco coloquei as listagens lado a lado, à direita com "> novo" na frente
5) fora do modo bloco acrescentei iconv -f iso-8859-15 -t utf-8 em todas as linhas
6) chmod u+x converte
7) ./converte
8) com joe no modo bloco inverti as colunas de posição em converte
9) substitui "iconv -f iso-8859-15 -t utf-8" por "mv"
10) ./converte
11) Muito obrigado pela dica!

Contribuir com comentário

Entre na sua conta para comentar.