ruby 1.9: неверная последовательность байтов в UTF-8 - PullRequest
108 голосов
/ 06 июня 2010

Я пишу сканер в Ruby (1.9), который потребляет много HTML со многих случайных сайтов.
При попытке извлечь ссылки, я решил просто использовать .scan(/href="(.*?)"/i) вместо nokogiri / hpricot (значительное ускорение). Проблема в том, что теперь я получаю много ошибок "invalid byte sequence in UTF-8".
Из того, что я понял, библиотека net/http не имеет каких-либо специфических параметров кодирования, и то, что входит, в основном не помечено должным образом. Как лучше всего работать с этими входящими данными? Я попытался .encode с установленными параметрами замены и неверными, но пока безуспешно ...

Ответы [ 11 ]

0 голосов
/ 06 июня 2010

Перед использованием scan убедитесь, что заголовок Content-Type запрашиваемой страницы имеет значение text/html, поскольку могут быть ссылки на такие вещи, как изображения, которые не кодируются в UTF-8. Страница также может быть не HTML, если вы взяли href в чем-то вроде <link> элемента. Как это проверить, зависит от того, какую библиотеку HTTP вы используете. Затем убедитесь, что результатом является только ascii с String#ascii_only? (не UTF-8, потому что HTML должен использовать только ascii, в противном случае могут использоваться сущности). Если оба эти теста пройдут успешно, можно использовать scan.

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