Tirando os acentos

December 19th, 2007

Recentemente tive que fazer uma rotina para tirar os acentos de um arquivo texto (fornecido pelo cliente) antes de serem processados, pois as diferenças de charset (tipicamente ISO-8859-1 vs. UTF-8) levavam a linha a ter um comprimento maior que o esperado. Assim, o script que interpretava a linha entendia tudo errado, pois é baseado em comprimento de strings. Procurei muito na internet (quero dizer, Google) mas não achei nada que pudesse resolver o problema. Então fui explorando a documentação do Ruby e experimentando no IRB até chegar nessa solução:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
f = File.open(filename,'r')

f.each_line do |line|
        line = line.strip
        next if line.length == 0
                        
        lines.push line

        # replace accented characters to avoid charset conflicts
        line = line.tr("\301\300\303\302\341\340\343\342",'a')
        line = line.tr("\311\312\351\352",'e')
        line = line.tr("\315\355",'i')
        line = line.tr("\323\325\324\363\365\364",'o')
        line = line.tr("\332\372",'u')
        line = line.tr("\307\347",'c')
        line = line.tr("\321\361",'n')

        # processamento da linha aqui
end

Não ficou lá muito elegante, mas pelo menos pra mim funcionou. Alguma sugestão de refactoring?

1 Response Follows

  1. Sylvestre Mergulhão says

    Pra converter de utf-8 pra iso(e o contrário tb) dá pra usar o iconv: http://ruby-doc.org/stdlib/libdoc/iconv/rdoc/index.html

    Abraço!

Sorry, comments are closed for this article.