ฉันจะลดขนาดสตริงที่ไม่ใช่ภาษาอังกฤษใน 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
ทำไมไม่ใช้อัญมณี unicode_utils
อัญมณีนี้จะไม่บังคับให้ downcase
ทำงาน อย่างไรก็ตาม คุณสามารถใช้:
UnicodeUtils.downcase('Привет') #=> 'привет'
หากคุณต้องการใช้มันง่ายเช่นนี้:
> "Привет".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
เนื่องจาก 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
วิธีแก้ปัญหาที่ดีและง่ายใน Rails คือการเพิ่ม string.rb ลงในโฟลเดอร์ Initializers จากนั้นในไฟล์นี้คุณสามารถแทนที่ String โดยใช้ mb_chars ซึ่งตอนนี้รองรับการเน้นเสียงและตัวอักษรแบบ downcase เช่น ñ
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
require 'active_support/core_ext'
เพิ่มเติมเพื่อหลีกเลี่ยงข้อผิดพลาด วิธีการที่ไม่ได้กำหนด
- person knut; 26.07.2012
mb_chars
ยังใช้ได้กับ capitalize
และ upcase
ทางออกที่ดี! เรายังสามารถโทร 'Привет'.mb_chars.downcase.wrapped_string
- person Stepan Zakharov; 07.06.2016
"Привет".downcase #=> "привет"
- person michau; 01.09.2016