`gsub ': несовместимые кодировки символов: UTF-8 и IBM437 - PullRequest
2 голосов
/ 06 декабря 2011

Я пытаюсь использовать поиск, Google, но безуспешно.

ОС: Windows XP Ruby версия 1.9.3po

Ошибка:

`gsub ': несовместимый символкодировки: UTF-8 и IBM437

Код:

require 'rubygems'
require 'hpricot'
require 'net/http'

source = Net::HTTP.get('host', '/' + ARGV[0] + '.asp')


doc = Hpricot(source) 

doc.search("p.MsoNormal/a").each do |a|
  puts a.to_plain_text
end

Программа выводит несколько строк, но когда текст «NOŻYCE», я получаю ошибку выше.Может ли кто-нибудь помочь?

Ответы [ 2 ]

3 голосов
/ 19 декабря 2011

Внутренняя кодировка исходной переменной - UTF-8, но это не то, что вам нужно.

Как писал tadman, вы должны сначала сказать Ruby, что фактические символы в строке находятся в кодировке IBM437.Затем вы можете преобразовать эту строку в вашу любимую кодировку, но только если такое преобразование возможно.

source.force_encoding('IBM437').encode('UTF-8')

В вашем случае вы не можете преобразовать вашу строку в ISO-8859-2, потому что не все символы IBM437 могутбыть преобразован в эту кодировку.Возможно, лучше всего придерживаться UTF-8.

В любом случае, уверены ли вы, что этот файл действительно передается в IBM437?Может быть, он хранится как таковой на сервере HTTP, но он отправляется по беспроводной сети с другой кодировкой.Или это может быть даже не совсем в IBM437, это может быть CP852, также называемый MS-DOC Latin 2 (отличается от ISO Latin 2).

2 голосов
/ 06 декабря 2011

Вы можете попробовать конвертировать HTML в UTF-8, так как кажется, что оригинал в винтажном стиле DOS :

source.encode!('UTF-8')

Это должно перевернуть его из 8-битного ASCII в UTF-8, как и ожидалось парсером Hpricot.

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