Это довольно просто с 1.9.2, так как регулярные выражения основаны на символах в 1.9.2, а 1.9.2 знает разницу между байтами и символами сверху вниз. Вы в Rails, поэтому вы должны получить все в UTF-8. К счастью, UTF-8 и ASCII перекрываются для всего диапазона ASCII, поэтому вы можете просто удалить все, что не находится между ' '
и '~'
, когда у вас есть кодированный в UTF-8 текст:
>> "Wheré is µ~pancakes ho元use?".gsub(/[^ -~]/, '')
=> "Wher is ~pancakes house?"
Хотя на самом деле нет причин идти на все эти неприятности. Ruby 1.9 прекрасно работает с Unicode, как и Rails и почти все остальное. Работа с текстом, не относящимся к ASCII, была кошмаром 15 лет назад, а теперь это обычное явление.
Если вам удастся получить текстовые данные, отличные от UTF-8, у вас есть несколько вариантов. Если кодировка ASCII-8BIT
или BINARY
, то вы, вероятно, можете обойтись без s.force_encoding('utf-8')
. Если у вас получится что-то отличное от UTF-8
и ASCII-8BIT
, вы можете использовать Iconv для перекодирования.
Ссылки