如何在 Ruby 1.9 上替换 Unicode gem?

5

很不幸,Unicode 0.1 (sudo gem install unicode) 在Ruby 1.9上不起作用。我有以下代码片段:

require "rubygems"
require "unicode"

str = "áéíóúç"
Unicode.normalize_KD(str).gsub(/[^\x00-\x7F]/n, "")
#=> aeiouc

我使用它将标题转换为永久链接,而不删除重音字符。

是否有一种使用packunpack方法转换此类文本的方法?


你应该挖掘一下 ruby-talk 的档案。我非常确定在最近的几天/几周内,Unicode gem 的作者在那里宣布了一个新版本,而且我也很确定 Ruby 1.9 在那个主题中被讨论过。不过,我实际上没有阅读过这个主题,所以我没有任何具体信息。 - Jörg W Mittag
实际上,那不是Unicode宝石,而是由@molf提到的Unicode-Utils宝石。(它也不是在过去几天内发生的,而是3个月前。) - Jörg W Mittag
2个回答

13

更新:更好的选择可能是使用专门针对这些缺失功能创建的 gem unicode_utils

require "unicode_utils"
UnicodeUtils.nfkd("áéíóúç").gsub(/[^\x00-\x7F]/,'').to_s
#=> "aeiouc"
有没有可能依赖于Rails的ActiveSupport库?如果是这样,你可以进行如下操作:
require "activesupport"
mb_str = ActiveSupport::Multibyte::Chars.new("áéíóúç")
mb_str.normalize(:kd).gsub(/[^\x00-\x7F]/,'').to_s
#=> "aeiouc"

ActiveSupport::Multibyte旨在为Ruby 1.8带来UTF-8/Unicode支持,但在1.9中也适用。如果您不想将它作为外部依赖项,可以借用代码的一些部分。


不错的替代品!我在一个Rails插件中使用Unicode gem,所以我肯定可以依赖它!非常感谢!不过最好有一个只使用Ruby 1.9的替代品,因为有很多gems在使用它,而ActiveSupport可能并不适用于所有的gems。 - Nando Vieira
那就是我在上面评论中想到的那个。谢谢你提醒我!实际上,我现在在我的玩具项目中正需要它。 - Jörg W Mittag
我认为在替换gem上的unicode时,最好使用unicode-utils gem而不是ActiveSupport!谢谢! ;) - Nando Vieira

1
在Rails中还有一个I18n.transliterate('string')方法。效果非常好。

我找不到这个方法的参考资料,你能提供文档链接吗?谢谢! - dgilperez
我更新了我的回答,看起来 #to_latin 已经被移除了。 - Marcin Adamczyk

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接