Rails:如何软件非英文字符串?

时间:2011-09-11 12:07:49

标签: ruby-on-rails ruby string ruby-on-rails-3 lowercase

我怎么能在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中使用。

5 个答案:

答案 0 :(得分:94)

str = "Привет"
str.mb_chars.downcase.to_s
#=> "привет"

答案 1 :(得分:7)

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

UnicodeUtils.downcase('Привет') #=> 'привет'

答案 2 :(得分: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

答案 3 :(得分:2)

自Ruby 2.4以来,内置full Unicode case mapping。资料来源:https://stackoverflow.com/a/38016153/888294。有关详细信息,请参阅Ruby 2.4.0文档:https://ruby-doc.org/core-2.4.0/String.html#method-i-downcase

答案 4 :(得分:1)

在Rails中一个很好的简单解决方案是将string.rb添加到initializers文件夹中,然后在该文件中可以使用mb_chars覆盖String,现在小写支持重音符号和字母,例如Ñ

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