Como substituir a gema Unicode no Ruby 1.9?
Pergunta
Infelizmente, o Unicode 0.1 (sudo gem install unicode
) não funciona no Ruby 1.9. Eu tenho o seguinte trecho:
require "rubygems"
require "unicode"
str = "áéíóúç"
Unicode.normalize_KD(str).gsub(/[^\x00-\x7F]/n, "")
#=> aeiouc
Eu usá-lo para converter títulos de permalink, sem remover os caracteres acentuados.
Existe uma maneira de converter tais textos usando métodos pack
ou unpack
?
Solução
Update: uma opção melhor pode ser usar a gema unicode_utils
que foi criado especificamente para estas características ausentes:
require "unicode_utils"
UnicodeUtils.nfkd("áéíóúç").gsub(/[^\x00-\x7F]/,'').to_s
#=> "aeiouc"
Existe a possibilidade de você pode depender de ActiveSupport do Rails? Então você pode fazer o seguinte:
require "activesupport"
mb_str = ActiveSupport::Multibyte::Chars.new("áéíóúç")
mb_str.normalize(:kd).gsub(/[^\x00-\x7F]/,'').to_s
#=> "aeiouc"
ActiveSupport::Multibyte
foi escrito para trazer suporte UTF-8 / Unicode para Ruby 1.8, mas funciona bem em 1,9 também. Você pode ser capaz de emprestar alguns dos o código se você não quer que ele como dependência externa.
Outras dicas
Há também método I18n.transliterate('string')
em Rails. Funciona como um encanto.