2010-06-30 2 views
1

У меня есть поле в моей модели Rails с максимальной длиной 255.Как получить подстроку Ruby строки Unicode?

Я импортирую данные в него, а некоторые импортируемые данные имеют длину> 255. Я готов просто отрубить его что я получаю максимально возможную допустимую строку, которая подходит.

Я изначально пытался сделать поле [0,255], чтобы получить это, но это на самом деле отрубает юникод прямо через символ. Когда я перехожу к тому, чтобы сохранить это в базе данных, он вызывает ошибку, говоря мне, что у меня есть недопустимый символ из-за того, что он был уменьшен вдвое или расквартирован.

Каков рекомендуемый способ обрезать символы Юникода, чтобы они соответствовали моему пространству, без измельчения отдельных символов?

ответ

2

Uh. Кажется, что усечение и друзья любят играть с chars, но не с их маленькими кузенами bytes. Вот быстрый ответ на вашу проблему, но я не знаю, если есть более straighforward и элегантный вопрос Я имею в виду ответ

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.

Смежные вопросы