Прочитать страницу кодирования GB2312, используя Ruby

Я пытаюсь проанализировать кодированную страницу GB2312 ( /questions/46522189/modulnoe-testirovanie-css/46522250#46522250), и это мой код.

Я еще не в части синтаксического анализа, просто в открытом и прочитанном, и я получил ошибку.

Это мой код:

require 'open-uri'
open("http://news.qq.com/a/20140824/015032.htm").read

И это ошибка:

Encoding::InvalidByteSequenceError: "\x8B" on GB2312

Я использую Ruby 2.0.0p247

Любое решение?

3 ответа

Решение

Я не знаю точно, почему это происходит при звонке .read, но вы можете обойти это, если вы используете Nokogiri. Просто передайте объект файла напрямую в Nokogiri без вызова .read:

require 'open-uri'
file = open("http://news.qq.com/a/20140824/015032.htm")
document = Nokogiri(file)

Ты можешь попробовать это

document = Nokogiri::HTML(open("http://news.qq.com/a/20140824/015032.htm"), nil, "GB18030")

Я не могу продублировать ошибку, используя 2.0.0p247,

require 'open-uri'
open("http://news.qq.com/a/20140824/015032.htm").read

Работает отлично.

тем не мение

require 'open-uri'
open("http://news.qq.com/a/20140824/015032.htm").read.encode('utf-8')

поднимет ошибку

Encoding::InvalidByteSequenceError: "\x8B" on GB2312

Вы пытаетесь преобразовать кодировку?

Другие вопросы по тегам