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

Publicado por Fernando em 10/06/2013

[ Hits: 92.315 ]

Blog: https://github.com/phoemur/

 


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.

Outras dicas deste autor

MPlayer - Como utilizar sem bloquear o prompt

Encriptando sua partição SWAP

MATE Desktop no Slackware - Compilação

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

Bloqueando acesso ao servidor a utilizadores do TOR

Leitura recomendada

Desmontando dispositivos ocupados (busy)

Suspendendo o root

Alterar hora de uma forma rápida

Rodando o Free Tennis

fuser - Descobrindo o processo que uma determinada porta está utilizando

  

Comentários
[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!

[5] Comentário enviado por removido em 10/07/2017 - 02:24h


No Slackware
https://slackbuilds.org/repository/14.2/system/convmv/?search=convmv


man convmv


Favoritada.





Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts