我正在编写一个 Rails 应用程序,该应用程序需要将 IDN 域名从 Punycode 转换为其 Unicode 等价物。我尝试安装绑定到 GNU LibIDN 的idn gem,但它不会编译本机代码。显然其他人对 Ruby 1.9.x 也有同样的问题。
我也尝试了纯 Ruby SimpleIDN gem,但我更喜欢原生的东西。
我正在编写一个 Rails 应用程序,该应用程序需要将 IDN 域名从 Punycode 转换为其 Unicode 等价物。我尝试安装绑定到 GNU LibIDN 的idn gem,但它不会编译本机代码。显然其他人对 Ruby 1.9.x 也有同样的问题。
我也尝试了纯 Ruby SimpleIDN gem,但我更喜欢原生的东西。
试试simpleidn gem。它适用于 Ruby 1.8.7 和 1.9.2。
编辑您的 Gemfile:
gem 'simpleidn'
然后可以输入如下命令:
SimpleIDN.to_unicode("xn--mllerriis-l8a.com")
=> "møllerriis.com"
SimpleIDN.to_ascii("møllerriis.com")
=> "xn--mllerriis-l8a.com"
哎呀 - 看起来我在发布后不久就找到了一个有能力的答案(抱歉)。在项目的 RubyForge 页面的错误报告部分中巧妙地放置了 09/2010 的补丁。将它添加到我的 Gemfile 现在允许我使用 idn 库:
gem 'idn', '~> 0.0.2', :git => 'git://github.com/mihu/idn'
太糟糕了,宝石显然被遗弃了:/
具有libDnsruby::Name
方法的类允许您将 IDN 域从 Unicode UTF-8 转换为 ASCII punycode:.punicode
Dnsruby
Dnsruby::Name.punycode('.cf')
# => "xn--en8h.cf"
https://github.com/knu/ruby-domain_name似乎具有完全相同的功能:
irb(main):018:0> SimpleIDN::Punycode.encode('axa.test')
=> "axa.test-"
irb(main):017:0> DomainName::Punycode.encode('axa.test')
=> "axa.test-"