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:

blog comments powered by Disqus
Google Analytics Alternative