2010-11-01 3 views
3

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

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

+0

вы можете легко передать строку в GSUB string.gsub («& амп», «&») – ipsum

+0

Делать это просто вызывает строку, чтобы стать регулярным выражением. Та же проблема – singpolyma

ответ

3

Вы должны кодировать начальную строку и использовать опцию 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

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

UPD: Для того, чтобы сделать ваше регулярное выражение будет ASCII, посмотрите на принятый ответ здесь: Ruby 1.9: Regular Expressions with unknown input encoding

def get_regex(pattern, encoding='ASCII', options=0) 
    Regexp.new(pattern.encode(encoding),options) 
end 
+0

Правильно, я сделал это. Проблема в том, что я не могу заставить регулярное выражение иметь такую ​​же кодировку (двоичную), как строку. – singpolyma

+0

@singpolyma, посмотрите UPD. Это то, что вам нужно? – Nakilon

+0

Правильно, я могу получить его как ASCII или UTF-8, но не могу заставить его быть двоичным/ASCII-8BIT – singpolyma

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