Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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?

like image 214
Nando Vieira Avatar asked Aug 24 '09 14:08

Nando Vieira


2 Answers

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.

like image 97
molf Avatar answered Oct 17 '22 04:10

molf


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

like image 39
Marcin Adamczyk Avatar answered Oct 17 '22 04:10

Marcin Adamczyk