7

我正在编写一个 Rails 应用程序,该应用程序需要将 IDN 域名从 Punycode 转换为其 Unicode 等价物。我尝试安装绑定到 GNU LibIDN 的idn gem,但它不会编译本机代码。显然其他人对 Ruby 1.9.x 也有同样的问题。

我也尝试了纯 Ruby SimpleIDN gem,但我更喜欢原生的东西。

4

4 回答 4

12

试试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"
于 2012-03-10T17:21:50.157 回答
3

哎呀 - 看起来我在发布后不久就找到了一个有能力的答案(抱歉)。在项目的 RubyForge 页面的错误报告部分中巧妙地放置了 09/2010 的补丁。将它添加到我的 Gemfile 现在允许我使用 idn 库:

gem 'idn', '~> 0.0.2', :git => 'git://github.com/mihu/idn'

太糟糕了,宝石显然被遗弃了:/

于 2011-06-01T04:37:13.087 回答
1

具有libDnsruby::Name方法的类允许您将 IDN 域从 Unicode UTF-8 转换为 ASCII punycode:.punicodeDnsruby

Dnsruby::Name.punycode('.cf')
# => "xn--en8h.cf"
于 2019-11-11T14:45:28.873 回答
0

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-"
于 2019-09-09T11:43:31.110 回答