37

如何在 Ruby on Rails 3 中小写非英语字符串?

str = "Привет"    # Russian 
puts str[0].ord   # => 1055
str.downcase!
puts str[0].ord   # => 1055 (Should be 1087)

我希望它可以在 Ruby 1.8.7 和 Ruby 1.9.2 中工作。

4

5 回答 5

97
str = "Привет"
str.mb_chars.downcase.to_s
#=> "привет"
于 2011-09-11T12:36:08.573 回答
7

为什么不使用 gem unicode_utils。此 gem 不会强制downcase工作,但是您可以使用:

UnicodeUtils.downcase('Привет') #=> 'привет'
于 2014-03-09T13:37:59.850 回答
6

如果你想像这样简单地使用它:

> "Привет".downcase
=> "привет"

您必须放入初始化程序文件夹文件string.rb

require 'unicode'

class String
  def downcase
    Unicode::downcase(self)
  end
  def downcase!
    self.replace downcase
  end
  def upcase
    Unicode::upcase(self)
  end
  def upcase!
    self.replace upcase
  end
  def capitalize
    Unicode::capitalize(self)
  end
  def capitalize!
    self.replace capitalize
  end
end
于 2016-12-10T12:53:48.567 回答
2

从 Ruby 2.4 开始,有一个内置的完整的 Unicode 大小写映射。资料来源:https ://stackoverflow.com/a/38016153/888294 。有关详细信息,请参阅 Ruby 2.4.0 文档:https ://ruby-doc.org/core-2.4.0/String.html#method-i-downcase

于 2017-09-18T14:57:56.347 回答
1

rails 中一个不错且简单的解决方案是将 string.rb 添加到初始化程序文件夹中,然后在此文件中您可以使用 mb_chars 覆盖字符串,现在小写支持重音符号和字母,如 Ñ

class String
  def downcase
    self.mb_chars.downcase.to_s
  end

  def capitalize
    self.mb_chars.capitalize.to_s
  end

  def upcase
    self.mb_chars.upcase.to_s
  end

  def titleize
    self.mb_chars.titleize.to_s
  end
end
于 2019-07-08T14:20:22.897 回答