Programação e Linux.

sexta-feira, 17 de dezembro de 2010

Remover acentos

Quando se está fazendo uma pesquisa de palavras em um banco de dados é melhor converter todos os caracteres acentuados em seus correspondentes sem acentos. Pesquisei e descobri que não é difícil fazer isto.

Por isso fiz alguns exemplos, um em php usando iconv, em python usando o suporte nativo da linguagem. Acredito que o exemplo usando iconv possa ser usado em C/C++ (man 3 iconv) visto que funciona em linha de comando (man 1 iconv) como mostrado no último exemplo.

(17/12/2010) Há também um exemplo em perl como pedido por Aurélio

Em todos os exemplos eu uso UTF-8.

Exemplo em php:

setlocale(LC_ALL, 'en_US.UTF8');

$string = "Iúri Diniz come açúcar";
echo iconv('UTF-8', 'ASCII//TRANSLIT', $string) . "\n";

Exemplo em python:

import unicodedata

string = "Iúri Diniz come açúcar"

print unicodedata.normalize(
"NFKD", string.decode('utf-8')).encode('ascii', 'ignore')

Exemplo usando linha de comando(bash):

echo "Iúri Diniz come açúcar" | iconv -f "UTF-8" -t "ASCII//TRANSLIT"


Exemplo usando perl:

use Text::Iconv;
$converter = Text::Iconv->new('UTF-8', 'ASCII//TRANSLIT');
print $converter->convert("Iúri Diniz come açúcar")

6 comentários:

AurelioCosta disse...

Esse homi ta se vendendo ao mercado.
:P

Cade o exemplo em perl ?

C L X disse...

Atendendo a pedidos, exemplo em perl:


use Text::Iconv;
$converter = Text::Iconv->new('UTF-8', 'ASCII//TRANSLIT');
print $converter->convert("Iúri Diniz come açúcar");

Anônimo disse...

muito obrigado!!! você salvou minha vida, passei 5 horas pesquisando na net e só agora achei algo realmente útil para lidar com a porcaria do utf8 no php!!!
valeu mesmo!!!!

Renato disse...

Cara, você salvou meu dia, tão simples mas tão funcional, seu exemplo em shell me ajudou muito, bastou dar um cat num arquivo gerando outra saída.

Parabéns.

Blabos disse...

O bom e velho iconv.

Quando vier ao Rio, cobre-me uma cerveja :)

fabiodan disse...

Bom post. Esta info é útil para gerar slugs de títulos e evitar que ç e á apareçam como traços.