Прочитать страницу кодирования 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
Вы пытаетесь преобразовать кодировку?