кодирование строки ruby - PullRequest
1 голос
/ 28 февраля 2010

Итак, я пытаюсь очистить экран от определенного сайта , используя nokogiri, но владельцы сайта не смогли указать правильную кодировку страницы в теге <meta>. В результате я пытаюсь разобраться со строками, которые думают, что они utf-8, но на самом деле это не так.

(Если вам интересно, вот файлы, которые я использовал для проверки этого:

)

После долгих поисков ( этот вопрос SO был особенно полезен), я обнаружил, что вызов encode('iso-8859-1', 'utf-8') для этой тестовой строки «работает», так как я получаю правильный символ ©. Теперь проблема в том, что в некоторых других строках есть другие символы, которые я не хочу преобразовывать в латинскую кодировку (например, Shōta превращается в Sh�\x8Dta).

Теперь, я, вероятно, собираюсь побеспокоить соответствующих веб-мастеров и попытаться заставить их исправить свои чертовы кодировки, но в то же время я хотел бы иметь возможность использовать имеющиеся у меня байты. Я вполне уверен, что есть способ, но я просто не могу понять, что это такое.

Ответы [ 2 ]

1 голос
/ 04 марта 2010

Итак, проблема в том, что ANN определяет кодирование только через заголовки, а Nokogiri не получает заголовки из функции open (). Итак, Нокогири догадывается, что страница имеет латинскую кодировку, и создает строки, которые мы не можем вернуть, чтобы вернуть исходные символы.

Вы можете указать кодировку для Nokogiri в качестве третьего параметра для Nokogiri :: HTML (), который решает проблему, которую я пытался решить изначально. Поэтому я приму этот ответ, хотя более конкретный вопрос, который я задал (как получить эти нелатинские символы из латинской строки), не отвечает.

1 голос
/ 01 марта 2010

Эти страницы имеют правильную кодировку UTF-8. Вот как их видит мой браузер, и когда я просматриваю их и говорю редактору декодировать их как UTF-8, они выглядят хорошо. Единственная проблема, которую я вижу, заключается в том, что некоторые символы авторского права, кажется, были повреждены до (или как), они были добавлены в контент. О-макрон и другие буквы, не входящие в ASCII, проходят нормально.

Я не знаю, знаете ли вы об этом, но правильный способ уведомить клиентов о кодировке страницы - через заголовок. Страницы могут включать эту информацию в теги <meta>, но это не требуется и не ожидается; браузеры обычно игнорируют такие теги, если присутствует заголовок.

Поскольку ваши страницы имеют формат XHTML, они также могут встраивать информацию о кодировке в инструкцию обработки XML, но, опять же, они не обязаны это делать. Но это также означает, что вы можете заставить Nokogiri обращаться с ними как с XML, а не с HTML, и в этом случае я ожидаю, что по умолчанию будет использоваться UTF-8. Но я не знаком с Нокогири, поэтому не могу быть уверен. И в любом случае, заголовок все еще является последним органом.

...