Ошибка кодирования в содержимом, полученном из open-uri в ruby ​​on rails

В некоторых случаях, когда я использую open для получения веб-страницы на Ruby, содержимое страницы имеет ошибку кодирования. Пример:

open("http://www.google.com.br").read

Такие символы, как ç и ã, заменяются на ?.

Как я могу получить правильные символы?


person Edmar    schedule 29.10.2010    source источник
comment
Вы используете utf-8 для своих персонажей?   -  person thenengah    schedule 29.10.2010


Ответы (2)


это похоже на работу:

require 'iconv'
i = Iconv.new('UTF-8','LATIN1')
i.iconv(open('http://google.com.br').read)
person jordinl    schedule 29.10.2010
comment
Это будет работать до тех пор, пока кодировка одинакова во всем документе. HTML с сайта, который создает собственное содержимое, обычно согласован. HTML с сайта, который собирает контент из нескольких мест, может оказаться повсюду на карте, например, Google. - person the Tin Man; 30.10.2010
comment
Этот неопределенный метод ошибки `read' для #‹Iconv:0x1166c2de0› - person TheExit; 06.12.2010
comment
у меня работает как в ruby-1.8.7, так и в ruby-1.9.0. Кроме того, ошибка говорит о чтении неопределенного метода для Iconv, но я не применяю чтение ни к одному экземпляру Iconv... - person jordinl; 06.12.2010

Запуск Ruby 1.9.2 здесь. Ваш код дает HTML, который содержит такие слова:

Configura\xE7\xF5es

Так что, по крайней мере, на моей рабочей машине (Vista, используя консоль Windows CMD) он возвращает экранированные символы HTML.

Кроме того, насколько я знаю, Ruby 1.9.2 "почти" полностью совместим с Unicode, поэтому я предполагаю, что у вас не должно быть проблем с UTF-8, если только ваша консоль не поддерживает печать символов UTF-8.

Надеюсь, это поможет.

person dimitarvp    schedule 04.11.2010