在我的Rails(2.3,Ruby 1.8.7)应用程序中,我需要将字符串截断为一定长度。字符串是unicode,当在控制台中运行测试时,例如'א'.length
,我意识到返回了一个双倍长度。我想要一个与编码无关的长度,以便对unicode字符串或latin1编码的字符串进行相同的截断。
我已经浏览了大部分用于Ruby的unicode材料,但我仍然有点黑暗。该如何解决这个问题?
答案 0 :(得分:4)
Rails有一个mb_chars
方法,它返回多字节字符。试试unicode_string.mb_chars.slice(0,50)
答案 1 :(得分:3)
"ア".size # 3 in 1.8, 1 in 1.9
puts "ア".scan(/./mu).size # 1 in both 1.8 and 1.9
答案 2 :(得分:1)
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
=> "กุ"
答案 3 :(得分:0)
您可以使用str.chars.slice(0, 50).join
之类的内容来获取字符串的前50个字符,无论每个字符使用多少字节。