如何获取Unicode字符串的Ruby子字符串?

时间:2010-06-30 01:59:52

标签: ruby unicode

我的Rails模型中有一个字段,最大长度为255。

我正在将数据导入其中,有时导入的数据的长度大于> 255.我愿意简单地将其删除,以便最终获得最大可能的有效字符串。

我最初尝试使用字段[0,255]来获取此字段,但这实际上会通过字符切断尾随的Unicode。当我然后将其保存到数据库中时,它会抛出一个错误,告诉我由于字符被减半或四分之一而导致我的字符无效。

建议的方法是切断Unicode字符以使其适合我的空间,而不会砍掉个别字符?

2 个答案:

答案 0 :(得分:2)

嗯。看起来像truncate和朋友喜欢和chars一起玩,但不是他们的小堂兄bytes。这是你的问题的快速答案,但我不知道是否有一个更直接和优雅的问题我的意思是答案

def truncate_bytes(string, size)
  count = 0
  string.chars.take_while{|c| (a += c.bytes.to_a.length) <= size }.join
end

查看Chars class of ActiveSupport

答案 1 :(得分:1)

在操作字符串之前使用多字节代理方法(mb_chars):

str.mb_chars[0,255]

请参阅http://api.rubyonrails.org/classes/String.html#method-i-mb_chars

请注意,在Rails 2.1之前,该方法是“chars”。