Обнаружение кодировки символов в HTML

Я загружаю HTML-страницу. Заголовок HTTP-типа содержимого указывает одну кодировку символов, а на странице есть тег meta, который указывает другой. Какой правильный способ справиться с этим?

Я думаю, что "правильный" - это не правильное слово, так как в любом случае никто не следует за проклятыми стандартами... так, каким образом это вызовет у меня наименьшие проблемы?

Ответ 1

Сделайте то же самое, что и веб-браузеры: используйте заголовок ответа. Когда HTML передается через HTTP, метатег игнорируется, когда присутствует заголовок ответа. Только при чтении HTML из локальной файловой системы диска используется метатег. Это также явно указано w3 HTML spec.

Подводя итог, соответствующие пользовательские агенты должны соблюдайте следующие приоритеты, когда определение символа документа кодирования (от наивысшего приоритета до самый низкий):

  • Параметр "charset" HTTP в поле "Content-Type".
  • Объявление META с настройкой "http-equiv" на "Content-Type" и значение, установленное для "charset".
  • Атрибут charset, установленный на элементе, который обозначает внешний ресурсов.

Любой существующий достойный парсер HTML на любом используемом вами языке должен учитывать это. В соответствии с вашей историей вопроса вы знакомы с Java, поэтому я предложил бы захватить Jsoup для этого.