一个Unicode字符串的长度

5
在我的Rails(2.3,Ruby 1.8.7)应用程序中,我需要将字符串截断到一定长度。该字符串是Unicode编码的,当在控制台中运行测试,例如'א'.length时,会返回双倍的长度。我希望得到一个不受编码影响的长度,以便对Unicode字符串或Latin1编码的字符串进行相同的截断。
我已经阅读了大部分Ruby的Unicode材料,但仍然有些困惑。如何解决这个问题?
4个回答

4

Rails有一个mb_chars方法,用于返回多字节字符。可以尝试使用unicode_string.mb_chars.slice(0,50)


3
"ア".size # 3 in 1.8, 1 in 1.9
puts "ア".scan(/./mu).size # 1 in both 1.8 and 1.9

1

charsmb_chars不能提供给您文本元素,这正是您所寻找的。对于文本元素,您需要使用unicode gem

mb_chars:

>> 'กุ'.mb_chars.size
=> 2

>> 'กุ'.mb_chars.first.to_s
=> "ก"

文本元素:

>> Unicode.text_elements('กุ').size
=> 1

>> Unicode.text_elements('กุ').first
=> "กุ"

0
你可以使用类似 str.chars.slice(0, 50).join 的方法来获取一个字符串的前50个字符,无论每个字符使用多少字节。

在控制台中,我得到了“undefined method `slice' for #Enumerable::Enumerator:0xb67a0ed4”。 - shmichael

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接