【问题标题】:How to replace the Unicode gem on Ruby 1.9?如何在 Ruby 1.9 上替换 Unicode gem?
【发布时间】:2010-11-22 07:29:33
【问题描述】:

很遗憾,Unicode 0.1 (sudo gem install unicode) 不适用于 Ruby 1.9。我有以下sn-p:

require "rubygems"
require "unicode"

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

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

有没有办法使用packunpack 方法转换此类文本?

【问题讨论】:

  • 您应该深入研究 ruby​​-talk 档案。我很确定在过去的几天/几周内,Unicode gem 的作者在那里宣布了一个新版本,我也很确定在那个线程中讨论了 Ruby 1.9。不过,我实际上并没有阅读该主题,所以我没有任何细节。
  • 其实那不是 Unicode gem,而是下面@molf 提到的Unicode-Utils gem。 (这几天也不是,是3个月前。)

标签: ruby unicode gem ruby-1.9


【解决方案1】:

更新:更好的选择可能是使用专门为这些缺失功能创建的 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 中也可以正常工作。如果您不希望它作为外部依赖项,您可以借用一些 the code

【讨论】:

  • 不错的替代品!我在 Rails 插件上使用 Unicode gem,所以我可以信赖它!非常感谢!不过,如果只使用 Ruby 1.9 来替代它会很好,因为有很多 gem 使用它,而 ActiveSupport 可能不是所有人的选择。
  • 这就是我在上面的评论中考虑的那个。谢谢你提醒我!实际上,我现在在我的玩具项目中就需要它。
  • 我认为在 gem 上替换 unicode 时最好使用 unicode-utils gem 而不是 ActiveSupport!谢谢! ;)
【解决方案2】:

Rails 中还有I18n.transliterate('string') 方法。像魅力一样工作。

【讨论】:

  • 我找不到此方法的参考资料,您能提供文档链接吗?谢谢!
  • 我更新了答案,好像#to_latin 已被删除。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-04
  • 1970-01-01
  • 2012-06-08
  • 2010-12-29
  • 2021-10-27
相关资源
最近更新 更多