sergioaraujo

 

iconv

Page history last edited by Sérgio Luiz Araújo Silva 2 yrs ago

Corrigindo nomes de arquivos com charset errado

Autor: Davidson Rodrigues Paulo

Data: 16/08/2006

Fonte: http://www.vivaolinux.com.br/dicas/impressora.php?codigo=7329

 

Corrigindo nomes de arquivos com charset errado

 

Muitas vezes, ao copiar arquivos de um computador para outro, principalmente via CD, os nomes dos arquivos ficam desajustados, mais especificamente os caracteres acentuadas e a cedilha. Por exemplo, um arquivo "Já Refulge a Glória Eterna.mp3" aparece como "Já Refulge a Glória Eterna.mp3".

 

Esse problema está relocionado ao charset do sistema de origem e o do seu sistema, que são diferentes. Entretanto, podemos facilmente resolver o problema e, com apenas um único comando, corrigir os nomes de todos os arquivos e diretórios presentes em um diretório qualquer.

 

Antes de mais nada, temos que saber qual o charset do seu sistema e o dos nomes dos arquivos. Para saber o charset do seu sistema, execute o comando locale. A saída será parecida com essa:

 

$ locale

LANG=pt_BR

LC_CTYPE="pt_BR"

LC_NUMERIC="pt_BR"

LC_TIME="pt_BR"

LC_COLLATE="pt_BR"

LC_MONETARY="pt_BR"

LC_MESSAGES="pt_BR"

LC_PAPER="pt_BR"

LC_NAME="pt_BR"

LC_ADDRESS="pt_BR"

LC_TELEPHONE="pt_BR"

LC_MEASUREMENT="pt_BR"

LC_IDENTIFICATION="pt_BR"

LC_ALL=pt_BR

 

O charset padrão do Linux é o ISO-8859-1 (também conhecido como Latin1). Sendo assim, tanto pt_BR quanto pt_BR.ISO8859-1 são para esse charset. Se, por outro lado, aparecer algo como pt_BR.UTF-8, então o charset do seu sistema é UTF-8.

 

Agora, vamos verificar o charset dos nomes dos arquivos. Para isso, acesse o diretório onde estão os arquivos e faça o seguinte procedimento:

 

$ ls -1 > lista

$ file lista

lista: UTF-8 text

 

Ou seja, o charset dos nomes dos arquivos é UTF-8, enquanto o do sistema é ISO-8859-1. Com essa informação em mãos, basta executar o seguinte comando, para corrigir os nomes dos arquivos:

 

#############
Trecho retirado do blog do mitre:
http://jfmitre.blogspot.com/2006/05/convertendo-arquivos-utf-8-em-iso-8859.html
O comando é muito simples: iconv
Faz parte da libc6, ou seja, todo mundo têm instalado, e possuí sintaxe simples.
iconv -f codificacao_de_origem -t codificacao_de_saida arquivo
Assim para converter UTF-8 para ISO-8859-1 temos:
iconv -f utf-8 -t iso-8859-1 arquivo
Para o contrário utilizamos:
iconv -f iso-8859-1 -t utf-8 arquivo
É necessário redirecionar a saida de arquivo para algum lugar, algo como:
iconv -f utf-8 -t iso-8859-1 arquivo > novo_arquivo
Sendo assim, eu acrescentei ao meu ~/.bashrc* as seguintes linhas
alias iso2utf='iconv -f iso-8859-1 -t utf-8'
alias utf2iso='iconv -f utf-8 -t iso-8859-1'
Agora quando eu quiser converter um tipo de arquivo em outro, eu só preciso usar o iso2utf ou o utf2iso
Agora, por que tanta desinformação sobre assunto ? É tão fácil converter um tipo em outro, é tão simples !
*Ainda não atualizei o ~/.bashrc disponível para download neste blog, quando ocorrer tal modificação eu informo.
Fonte: http://jfmitre.blogspot.com/2006/05/convertendo-arquivos-utf-8-em-iso-8859.html
######################################

 

$ ls -1 | while read arquivo ; do

novo="`echo $arquivo | iconv -f UTF-8 -t ISO-8859-15`"

if [ "$novo" != "$arquivo" ] ; then

mv "$arquivo" "$novo"

fi done

 

Um outro jeito sem a criação de um laço:

 

find -maxdepth 1 -type f | xargs -i iconv -f iso-8859-1 -t utf-8 {} -o {}

 

O segredo está no comando iconv, que converte o charset, de UTF-8 (-f UTF-8) para ISO-8859-15 (-t ISO-8859-1). Se no seu sistema os charsets forem outros, basta trocar ISO-8859-1 e UTF-8 pelos respectivos charsets.

 

Agradecimentos especiais ao  Eduardo por ajudar na melhoria dessa dica, indicando uma situação onde ela não se aplicava (vide comentários abaixo).

 

Abraços,

Davidson

 

Script para converter todos os arquivos para utf-8

#!/bin/bash
PROGRAMA=`basename $0`
for i in *
do
if [ "$PROGRAMA" != "$i" -a ! -d "$i" ]
then
iconv -f iso-8859-1 -t utf-8 $i > $i.utf
mv $i.utf $i
fi
done

 

 

 

http://www.vivaolinux.com.br/dicas/verDica.php?codigo=7329

 

Veja também

Comments (0)

You don't have permission to comment on this page.