37

Ruby on Rails 3で英語以外の文字列を小文字にするにはどうすればよいですか?

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

Ruby1.8.7とRuby1.9.2で動作させたい。

4

5 に答える 5

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

ジェムを使わないのはなぜですか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を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
于 2019-07-08T14:20:22.897 に答える