Как я могу изменить строку, отличную от английского в 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.
Как я могу изменить строку, отличную от английского в 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.
str = "Привет"
str.mb_chars.downcase.to_s
#=> "привет"
Почему бы не использовать gem unicode_utils
. Этот камень не заставит downcase
работать, однако вы можете использовать:
UnicodeUtils.downcase('Привет') #=> 'привет'
Если вы хотите легко использовать это:
> "Привет".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
Так как Ruby 2.4 существует встроенное полное отображение кода Unicode. Источник: fooobar.com/questions/23355/.... Более подробную информацию см. В документации к Ruby 2.4.0: https://ruby-doc.org/core-2.4.0/String.html#method-i-downcase
Хорошее и простое решение в rails - добавить string.rb в папку инициализаторов, затем в этом файле вы можете переопределить String с помощью 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