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")

7 comentários:

AurelioCosta disse...

Esse homi ta se vendendo ao mercado.
:P

Cade o exemplo em perl ?

Unknown 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.

wx7ktx37fc disse...

The modern CNC machine design grew out of the work of Stockings John T. Parsons through the late 1940s and early Fifties. After World War II, Parsons was concerned in the manufacture of helicopter rotor blades, which required precise machining of advanced shapes. Parsons quickly discovered that through the use of an early IBM pc, he was in a position to} make far more correct contour guides than had been potential utilizing handbook calculations and layouts. Based on this expertise, he won an Air Force contract to develop an "automatic contour chopping machine" to provide massive wing part pieces for plane. Utilizing a computer card reader and precise servomotor controls, the ensuing machine was large, sophisticated, and expensive. It labored automatically, although, and produced pieces with the high degree of accuracy required by the plane trade.