shadowmaru.org

Vai tomar café

Tirando os acentos

by Ricardo Yasuda on December 19, 2007 21:29

Posted in Ruby

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:

f = File.open(filename,‘r’)

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

lines.push line

  1. 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?

Tags: acentos, ruby, charset

You may also like:

Tweetbacks

Tweet this post

    Comments

    1. Sylvestre Mergulhão said about 1 year ago

      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!

    Write a comment

    Google Analytics Alternative