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
Sorry, comments are closed for this article.


on January 1st, 2008 at 09:00 PM
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!