在我的Rails(2.3,Ruby 1.8.7)应用程序中,我需要将字符串截断为一定长度。该字符串是unicode,并且在控制台中运行测试时(例如'א'.length
),我意识到返回了双倍长度。我想要一个与编码无关的长度,以便对unicode字符串或latin1编码的字符串进行相同的截断。unicode字符串的长度
我已经超过大多数Ruby的unicode的材料,但我还是有点黑暗。应该如何解决这个问题?
在我的Rails(2.3,Ruby 1.8.7)应用程序中,我需要将字符串截断为一定长度。该字符串是unicode,并且在控制台中运行测试时(例如'א'.length
),我意识到返回了双倍长度。我想要一个与编码无关的长度,以便对unicode字符串或latin1编码的字符串进行相同的截断。unicode字符串的长度
我已经超过大多数Ruby的unicode的材料,但我还是有点黑暗。应该如何解决这个问题?
Rails有一个mb_chars
方法,它返回多字节字符。尝试unicode_string.mb_chars.slice(0,50)
您可以使用类似str.chars.slice(0, 50).join
得到一个字符串的前50个字符不管它每字符多少字节使用。
在控制台中,我得到'未定义的方法'片”为#<可枚举::枚举:0xb67a0ed4>' – shmichael 2010-08-31 06:12:00
"ア".size # 3 in 1.8, 1 in 1.9
puts "ア".scan(/./mu).size # 1 in both 1.8 and 1.9
chars
和mb_chars
不给你文字元素,这是你仿佛在寻找。
对于文本元素,你会希望unicode gem。
mb_chars:
>> 'กุ'.mb_chars.size
=> 2
>> 'กุ'.mb_chars.first.to_s
=> "ก"
text_elements:
>> Unicode.text_elements('กุ').size
=> 1
>> Unicode.text_elements('กุ').first
=> "กุ"
这是我最终使用: http://pastie.org/1129327 – shmichael 2010-08-31 16:39:03