Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Ruby: Общие вопросы > Проблема с кириллицей при парсинге веб-страниц


Автор: Sahon 5.7.2012, 12:41
Код Ruby:
Код
require 'open-uri'
# coding: utf-8
page = open('http://bus.com.ua/')
text = page.read

city = text.scan(%r{names.html" title="Станции по алфавиту">(.*)</a></td><td>0432671342</td><td>})
puts "Karma = #{city}"


Выдает ошибки:
Код
Parser.rb:6: invalid multibyte char (US-ASCII)
Parser.rb:6: invalid multibyte char (US-ASCII)
Parser.rb:6: syntax error, unexpected $end, expecting ')'
...t.scan(%r{names.html" title="Станции по алфав�...
...                               ^





Помогите исправить.

P. S. Кодиковка файла - UTF-8

Автор: Rikkit 6.7.2012, 11:45
Кодировку нужно указывать в самом верху файла, выше чем require.

Автор: Sahon 6.7.2012, 17:33
Цитата(Rikkit @ 6.7.2012,  11:45)
Кодировку нужно указывать в самом верху файла, выше чем require.

Это сработало, но появилась другая ошибка:
Код
Parser.rb:6:in `scan': incompatible encoding regexp match (UTF-8 regexp with Windows-1251 string) (Encoding::CompatibilityError)
    from Parser.rb:6:in `<main>'


Перевод:
Код
Parser.rb:6:в `scan': несоответсвующая кодировка в регулярном выражении (регулярное выражение в UTF-8 и строка в Windows-1251) (Кодировка::ОшибкаСовместимости)
    из Parser.rb:6:в`<main>'


Как это побороть?

Автор: WarHog 17.7.2012, 23:46
Ну файл у тебя в utf-кодировке, а страница - в windows-1251.  У тебя два варианта - либо смени кодировку файла со скриптом на windows-1251, либо после прочтения страницы в String конвертни ее т.о.:
Код

  text =  page.read.encode("utf-8")

И это... Не надо html регэкспами парсить. Возьми nokogiri.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)