unicode字符串的长度

时间:2010-08-30 23:16:11

标签: ruby-on-rails ruby unicode

在我的Rails(2.3,Ruby 1.8.7)应用程序中,我需要将字符串截断为一定长度。字符串是unicode,当在控制台中运行测试时,例如'א'.length,我意识到返回了一个双倍长度。我想要一个与编码无关的长度,以便对unicode字符串或latin1编码的字符串进行相同的截断。

我已经浏览了大部分用于Ruby的unicode材料,但我仍然有点黑暗。该如何解决这个问题?

4 个答案:

答案 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)

charsmb_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个字符,无论每个字符使用多少字节。