HTML смешанные кодировки? - PullRequest
       5

HTML смешанные кодировки?

4 голосов
/ 28 сентября 2011

Сначала я хотел бы поблагодарить вас за помощь заранее.

В настоящее время я пишу веб-сканер, который анализирует содержимое HTML, удаляет теги HTML, а затем проверяет орфографию текста, полученного из анализа.

Удаление HTML-тегов и проверка правописания не вызвало никаких проблем при использовании JSoup и Google Spell Check API.

Я могу извлечь содержимое из URL-адреса и передать эту информацию в байт [], а затем, в конечном счете, в строку, чтобы ее можно было удалить и проверить орфографию. У меня проблема с кодировкой символов.

Например, при разборе http://www.testwareinc.com/...

Оригинальный текст: Мы расширили наши услуги тестирования мобильных веб-приложений и мобильных приложений.

... страница использует ISO-8859-1 в соответствии с метатегом ...

ISO-8859-1 Parse: Мы расширили наши услуги по тестированию мобильных веб-приложений и мобильных приложений.

... затем пытается использовать UTF-8 ...

UTF-8 Parse: Мы расширили наши услуги тестирования мобильных веб-приложений и мобильных приложений.

Вопрос Возможно ли, что HTML веб-страницы может включать в себя сочетание кодировок? И как это можно обнаружить?

Ответы [ 4 ]

2 голосов
/ 28 сентября 2011

Похоже, что апостроф закодирован как байт 0x92, который согласно Wikipedia является неназначенной / частной кодовой точкой.

С этого момента, похоже, браузер отступаетпредполагая, что это некодированный однобайтовый код Unicode: + 0092 ( Private Use Two ), который представляется как апостроф.Не нужно ждать, если это один байт, скорее всего cp1252 : браузеры должны иметь стратегию отката в соответствии с объявленным CP, например, ISO-8859-1 -> CP1252.

Так что нетздесь смесь кодирования, но, как говорили другие, сломанный документ.Но с запасной эвристикой, которая иногда помогает, иногда нет.

Если вам достаточно любопытно, вы можете погрузиться в исходный код FF или Chrome, чтобы увидеть, что именно они делают в таком случае.

1 голос
/ 28 сентября 2011

Наличие более 1 кодировки в документе не является смешанным документом, это поврежденный документ.

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

Нет хорошего способа справиться с этим.Можно попытаться угадать кодировку документа, но это сложно и не надежно на 100%.В таких случаях, как ваш, самое простое решение - просто игнорировать части документа, которые невозможно декодировать.

0 голосов
/ 28 сентября 2011

Apache Tika имеет детектор кодирования. Существуют также коммерческие альтернативы, если вам нужно, скажем, что-то в C ++ и вы можете потратить деньги.

Я могу в значительной степени гарантировать, что каждая веб-страница имеет одну кодировку, но легко ошибиться в отношении какой .

0 голосов
/ 28 сентября 2011

похоже на проблему со специальными символами. Проверьте это StringEscapeUtils.escapeHtml , если это поможет. или любой другой метод

отредактировано: добавил эту логику, так как он не смог заставить работать код

public static void main(String[] args) throws FileNotFoundException {
        String asd = "’";
        System.out.println(StringEscapeUtils.escapeXml(asd)); //output - ’
    System.out.println(StringEscapeUtils.escapeHtml(asd)); //output - ’
}
...