Pesquisar neste blog

Resolvendo o problema de letras acentuadas estranhas.

quinta-feira, 20 de março de 2008

Resolvendo o problema de letras acentuadas estranhas.

Voce pega um arquivo. Enche ele de acentos. Fica tudo bonitinho. De repente, envia por e-mail em outro computador ou passa pela rede, ou copia no pendrive e.... .... .... BOOM!! Um monte de caracteres estranhos. Se você já foi vitima desse tpo de incidente, veja aqui as formas de se contornar elegantemente esse problema.


A Causa.
Isso acontece por quê existem padrões de codificação de caracteres diferentes nos arquivos. A salada é a seguinte. Alguns sistemas operacionais (windows xp e kurumin são alguns deles) utilizam um sistema de codificação reconhecido pelos padrões internacionais como sendo do ocidente europeu chamados iso-8859-1. Este padrão também é usado no Brasil. Acontece que de uns tempos pra cá, um novo padrão foi sendo utilizado por várias distribuições e sistemas operacionais (ubuntu e Windows Vista são uns deles) que ao que tudo indica, é a nova padronização internacional denominada UTF-8 e é aí que dá o rolo. Um arquivo criado sobre codificação iso-8859-1 aparece com caracteres acentuados totalmente errados em um sistema configurado para entender a codificação UTF-8, e vice-versa. Este é o problema que vamos contornar.

Solução pelo Software.
Alguns softwares até ajudam um pouco permitindo que você escolha a codificação do arquivo e o salve com outro formato. Quase todos os editores de textos do KDE fazem isso e a maioria de suas aplicações também. Aqui no exemplo, vemos uma tela do Kwrite exibindo todos os códigos possíveis para uma eventual correção ou mudança na codificação. É só escolher e salvar.

Boa! Mas é quando o software em questão não tem o recurso?

Usando a ferramenta 'iconv'
O iconv é uma ferramenta em linha de comando que corrige facilmente os arquivos de texto, alterando assim a sua codificação e permitindo uma rápida correção dos mesmos.
Imagine que se tenha o seguinte arquivo de texto:

texto-iso-88591
este texto � um exemplo que acentos acentuados
que usam outros caracteres podem aparecer completamente distorcidos.
Como exemplo, o texto acima tem apenas um caractere estranho, mas agora,
veja abaixo:
D�vido que voc� tenha paci�ncia e a��o para a boa compreen��o desta m�xima.

Use o iconv para converter o texto assim:

iconv -f iso-8859-1 -t utf-8 texto-iso-88591

este texto é um exemplo que acentos acentuados
que usam outros caracteres podem aparecer completamente distorcidos.
Como exemplo, o texto acima tem apenas um caractere estranho, mas agora,
veja abaixo:
Dúvido que você tenha paciência e ação para a boa compreenção desta máxima.

Não tem segredo né? -f significa from ou seja, a codificação atual do arquivo. -t significa to, ou seja, como o arquivo deverá ficar. Para maiores informações dê uma olhada no manual com o comando: man iconv.
Como se pode observar, o iconv mostra na tela, o texto escrito da maneira correta, mas não corrige o texto propriamente dito. Isso é ótimo, pois assim, além de não estregarmos o texto com algum acidente, vemos o resultado primeiro para só depois aplicarmos. Se tudo estiver ok, então é só pegar a resposta do iconv e redirecionar a saída para outro arquivo.

iconv -f iso-8859-1 -t utf-8 texto-iso-88591 > texto-utf-8

Pronto! O arquivo texto-utf-8 é a correção do arquivo texto-iso-88591.

Atenção!!
Nunca codifique um arquivo por engano pois os danos são irreversíveis.
Por exemplo. Um arquivo codificado em utf-8 que algum idiota colocou caracteres esquisitos, e você, imaginando estar em iso-8859-1, rodou o iconv para a conversão de codificação. Já era! Vai ter que corrigir no braço. Para evitar esse tipo de problema, use o comando file e descubra o formato do arquivo antes.

file arquivo-suspeito.txt

Um script para converter vários arquivos ao mesmo tempo.

Se você copiou uma pasta inteira com 100 arquivos com outra codificação, pode usar um for para facilitar sua vida:

for arquivo in `ls`; do iconv -f iso-8859-1 -t utf-8 $arquivo > novo_$arquivo


Fácil né?!

Tá bom. E os nomes dos arquivos?
Esse é realmente o galho mais chato. Além de ser o mais freqüente, e pra váriar o menos comentado.
Voce vai em uma pasta compartilhada, Windows XP e lá tá... Um monte de arquivo de todo o tipo com o nome errado. Esses arquivos, ou você renomeia, ou não abre direito e mais um monte de problemas que você enfrenta. Mas o pior mesmo é quando uma praga de nome esquisito é local. Em sua própria máquina. O KDE não renomeia o arquivo, dizendo que o arquivo não existe e, via terminal, bem, é meio difícil voce achar a tecla � para digitar em seu teclado.



Fuçando na internet, eu até encontrei alguns scripts legais usando o iconv e mais um monte de loucura para ele renomear os nomes de arquivos. Até cheguei a bolar alguns scripts bem legais mesmo. Mas não é necessário nada disso pois existe um programa muito mais prático que resolve esse problema de forma bem mais rápida. É o convmv.

O convmv faz o mesmo que o iconv, mas faz com os nomes de arquivos, resolvendo assim nosso terrível problema. Bem, vamos ao trabalho.

Para o nosso exemplo, vamos tomar como base o arquivo relat�rio.txt. Execute o comando:

convmv -f iso-8859-1 -t utf-8 relat?orio.txt

Veja que você pode usar um ponto de interrogação normal (ou o caractere que o terminal exibir no comando ls) ou simplesmente usar o poderoso para completar automaticamente o nome do arquivo, tanto faz.
A saída que o comando vai gerar é algo como isso:

Starting a dry run without changes... mv "./relat�rio.txt" "./relatório.txt" No changes to your files done. Use --notest to finally rename the files.

Ou seja, ele vai exibir a correção primeiro e caso tudo esteja ok. então sim, use o mesmo comando, porém com a opção --notest na frente.

convmv -f iso-8859-1 -t utf-8 relat?rio.txt --notest


mv "./relat�rio.txt" "./relatório.txt" Ready!

Se você for esperto, pode adaptar o script lá de cima para este comando também. Fica com lição de casa.

Acertando o apache
Se você tem um servidor WEB e já viu este problema nas páginas, deve saber que não é muito legal mudar o layout de uma página da Web. Até mesmo por que são muitas e muitas páginas, dependendo do que você quer fazer. A solução é fazer um pequeno ajuste no apache para que o Servidor Web corrija as páginas. A solução é simples.
Vá, ou no arquivo do seu site (ex.: /etc/apache2/sites-available/seu-site), ou no httpd.conf, ou no /etc/apache2/conf.d/charset (para ubuntu) ou em /etc/apache2/apache2.conf, bem, você é o administrador! É sua obrigação saber onde está o seu arquivo de configuração hehehehe. Mas como eu ia dizendo, vá há um desses arquivos e adicione ou descomente a seguinte linha:

AddDefaultCharset UTF-8

Pronto! Tudo resolvido.
Fonte: http://prof-david.blogspot.com/2008/02/resolvendo-o-problema-de-letras.html

Nenhum comentário:

Postar um comentário

Para seu comentário ser publicado:
1 - Não faça comentários ofensivos, abusivos, com palavrões, que desrespeitem as leis dos país.
2- Os comentários devem ter relação com a postagem.

 

Seguidores do blog

Mais lidos