Nando Vieira
Nando Vieira

Reputation: 974

How to replace the Unicode gem on Ruby 1.9?

Unfortunately, the Unicode 0.1 (sudo gem install unicode) doesn't work on Ruby 1.9. I have the following snippet:

require "rubygems"
require "unicode"

str = "áéíóúç"
Unicode.normalize_KD(str).gsub(/[^\x00-\x7F]/n, "")
#=> aeiouc

I use it to convert titles to permalink, without removing accented characters.

Is there a way of converting such texts using pack or unpack methods?

Upvotes: 5

Views: 3604

Answers (2)

molf
molf

Reputation: 74945

Update: a better option may be to use the gem unicode_utils that was created specifically for these missing features:

require "unicode_utils"
UnicodeUtils.nfkd("áéíóúç").gsub(/[^\x00-\x7F]/,'').to_s
#=> "aeiouc"

Is there a possibility you can depend on Rails' ActiveSupport? Then you can do the following:

require "activesupport"
mb_str = ActiveSupport::Multibyte::Chars.new("áéíóúç")
mb_str.normalize(:kd).gsub(/[^\x00-\x7F]/,'').to_s
#=> "aeiouc"

ActiveSupport::Multibyte was written to bring UTF-8/Unicode support to Ruby 1.8, but works fine in 1.9 too. You may be able to borrow some of the code if you don't want it as an external dependency.

Upvotes: 13

Marcin Adamczyk
Marcin Adamczyk

Reputation: 509

There is also I18n.transliterate('string') method in Rails. Works like a charm.

Upvotes: 1

Related Questions