Ruby 1.9 регулярное кодирование - PullRequest
3 голосов
/ 01 ноября 2010

Я анализирую этот канал http://www.sixapart.com/labs/update/developers/ с помощью nokogiri, а затем запускаю регулярное выражение для содержимого некоторых тегов.Контент в основном UTF-8, но иногда он поврежден.Тем не менее, для моего случая мне все равно, и мне просто нужно пропустить нужные части контента, поэтому я с радостью воспринимаю данные как двоичные / ASCII-8BIT.Проблема в том, что независимо от того, что я делаю, регулярные выражения в моем сценарии рассматриваются как UTF-8 или ASCII.Независимо от того, на что я установил комментарий кодировки или что я делаю для создания регулярного выражения.

Есть ли решение для этого?Могу ли я заставить регулярное выражение в двоичном виде?Можно ли легко сделать gsub без регулярных выражений?(Я просто заменяю & на &)

Ответы [ 2 ]

3 голосов
/ 04 июня 2013

Вам необходимо закодировать исходную строку и использовать опцию FIXEDENCODING.

1.9.3-head :018 > r = Regexp.new("chars".force_encoding("binary"), Regexp::FIXEDENCODING)
=> /chars/
1.9.3-head :019 > r.encoding
=> #<Encoding:ASCII-8BIT>
0 голосов
/ 01 ноября 2010

Strings имеют свойство кодирования. Попробуйте применить метод String#force_encoding перед применением регулярных выражений.

UPD: чтобы сделать ваше регулярное выражение ascii, посмотрите на принятый ответ здесь: Ruby 1.9: Регулярные выражения с неизвестной входной кодировкой

def get_regex(pattern, encoding='ASCII', options=0)
  Regexp.new(pattern.encode(encoding),options)
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...