Rails:如何小写非英文字符串?
Posted
技术标签:
【中文标题】Rails:如何小写非英文字符串?【英文标题】:Rails: How to downcase non-English string? 【发布时间】:2011-11-14 17:42:40 【问题描述】:如何在 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 中工作。
【问题讨论】:
你的意思是希腊语还是任何一种非英语的? 目前我对俄语很感兴趣,但我以后可能想使用其他语言,所以我正在寻找一个通用的解决方案。 【参考方案1】:Rails 中一个不错且简单的解决方案是将 string.rb 添加到初始化程序文件夹中,然后在此文件中您可以使用 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
【讨论】:
【参考方案2】:从 Ruby 2.4 开始,有一个内置的 full Unicode case mapping。来源:https://***.com/a/38016153/888294。详见 Ruby 2.4.0 文档:https://ruby-doc.org/core-2.4.0/String.html#method-i-downcase
【讨论】:
【参考方案3】:如果你想像这样简单地使用它:
> "Привет".downcase
=> "привет"
你必须放入initializers文件夹文件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
【讨论】:
【参考方案4】:为什么不使用 gem unicode_utils
。这个 gem 不会强制 downcase
工作,但是你可以使用:
UnicodeUtils.downcase('Привет') #=> 'привет'
【讨论】:
【参考方案5】:str = "Привет"
str.mb_chars.downcase.to_s
#=> "привет"
【讨论】:
如果没有rails,您需要一个额外的require 'active_support/core_ext'
以避免未定义的方法-错误
太棒了,为什么他们没有在 ruby 2.0 中修复它:(
mb_chars
也适用于capitalize
和upcase
。很好的解决方案!我们也可以拨打'Привет'.mb_chars.downcase.wrapped_string
在 Ruby 2.4 中,它最终按预期工作:"Привет".downcase #=> "привет"
以上是关于Rails:如何小写非英文字符串?的主要内容,如果未能解决你的问题,请参考以下文章
RFC 3986 中关于非英文字符的“不区分大小写”是啥意思?
力扣784. 字母大小写全排列 回溯法 C++递归和非递归俩种实现非方式