Как получить подстроку Ruby строки Unicode? - PullRequest
1 голос
/ 30 июня 2010

В моей модели Rails есть поле с максимальной длиной 255.

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

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

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

Ответы [ 2 ]

2 голосов
/ 30 июня 2010

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

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

Посмотрите на класс ActiveSupport Chars .

1 голос
/ 04 августа 2011

Используйте многобайтовый прокси-метод (mb_chars) перед манипулированием строкой:

str.mb_chars[0,255]

См. http://api.rubyonrails.org/classes/String.html#method-i-mb_chars.

Обратите внимание, что до Rails 2.1 этот метод был "chars".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...