在Ruby中,如何将ë,à,é,ä等特殊字符转换为e,a,e,a?

时间:2016-09-09 09:35:13

标签: ruby unicode special-characters

我想将e之类的字符转换为普通hide()。我希望转换语言以及人们如何键入城市。例如,大多数人在搜索时实际上键入了Brasilia,而不是Brasília。当像Rueters这样的新闻机构报道巴西利亚时,他们通常将其拼写为巴西利亚。所以再次,只是寻找任何宝石(或字符编码数学/方法可能更好,因为可以使用该答案,以供参考,在其他语言)。

这只是为了处理典型的“扩展ASCII”字符集。注意:我正在使用标准的Unicode字符串。

2 个答案:

答案 0 :(得分:18)

您可能正在寻找I18n#transliterate

Gem为here,使用gem install i18n安装。

示例:

irb(main):001:0> require 'i18n'
=> true
irb(main):002:0> I18n.enforce_available_locales = false
=> false
irb(main):003:0> I18n.transliterate("ë,à,é,ä")
=> "e,a,e,a"

答案 1 :(得分:11)

从Ruby 2.2开始,String#unicode_normalizenormalize个unicode字符串。 NFKD表单分隔字符和标点符号:

'ë'.unicode_normalize(:nfkd).chars
#=> ["e", "̈"]
#     ^    ^
#   char  punctuation

由于该字符是有效的ASCII码点而标点符号不是,因此可以用它来删除后者:

'ë,à,é,ä'.unicode_normalize(:nfkd).encode('ASCII', replace: '')
#=> "e,a,e,a"