I'm writing a Rails app that needs to convert an IDN domain name from Punycode into its Unicode equivalent. I tried installing the idn gem that has bindings to GNU LibIDN, but it won't compile the native code. Apparently others have the same issue with Ruby 1.9.x.
I also tried the pure Ruby SimpleIDN gem, but I would prefer something native.
You can currently register a .com or . net internationalized domain name. However, to be able to register an IDN, you must first convert it to Punycode. Punycode is a method for transcribing multi-byte Unicode characters into standard ASCII characters.
By default, many web browsers use Punycode encoding to represent unicode characters in the URL to defend against Homograph phishing attacks (where the website address looks legitimate, but is not, because a character or characters have been replaced deceptively with Unicode characters).
What is punycode? Punycode is a way to represent International Domain Names (IDNs) with the limited character set (A-Z, 0-9) supported by the domain name system. For example, "münich" would be encoded as "mnich-kva". An IDN takes the punycode encoding, and adds a "xn--" in front of it.
Try the simpleidn gem. It works with Ruby 1.8.7 and 1.9.2.
Edit your Gemfile:
gem 'simpleidn'
then you can enter the command as follows:
SimpleIDN.to_unicode("xn--mllerriis-l8a.com")
=> "møllerriis.com"
SimpleIDN.to_ascii("møllerriis.com")
=> "xn--mllerriis-l8a.com"
Whoops - looks like I found a capable answer shortly after posting (sorry). There is a subtly placed patch from 09/2010 in the bug reports section of the project's RubyForge page. Adding this to my Gemfile now allows me to use the idn library:
gem 'idn', '~> 0.0.2', :git => 'git://github.com/mihu/idn'
Too bad that the gem is apparently abandoned :/
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With