我的Rails模型中有一个字段,最大长度为255。
我正在将数据导入其中,有时导入的数据的长度大于> 255.我愿意简单地将其删除,以便最终获得最大可能的有效字符串。
我最初尝试使用字段[0,255]来获取此字段,但这实际上会通过字符切断尾随的Unicode。当我然后将其保存到数据库中时,它会抛出一个错误,告诉我由于字符被减半或四分之一而导致我的字符无效。
建议的方法是切断Unicode字符以使其适合我的空间,而不会砍掉个别字符?
答案 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
答案 1 :(得分:1)
在操作字符串之前使用多字节代理方法(mb_chars):
str.mb_chars[0,255]
请参阅http://api.rubyonrails.org/classes/String.html#method-i-mb_chars。
请注意,在Rails 2.1之前,该方法是“chars”。