Ответ 1
Сделайте то же самое, что и веб-браузеры: используйте заголовок ответа. Когда HTML передается через HTTP, метатег игнорируется, когда присутствует заголовок ответа. Только при чтении HTML из локальной файловой системы диска используется метатег. Это также явно указано w3 HTML spec.
Подводя итог, соответствующие пользовательские агенты должны соблюдайте следующие приоритеты, когда определение символа документа кодирования (от наивысшего приоритета до самый низкий):
- Параметр "charset" HTTP в поле "Content-Type".
- Объявление META с настройкой "http-equiv" на "Content-Type" и значение, установленное для "charset".
- Атрибут charset, установленный на элементе, который обозначает внешний ресурсов.
Любой существующий достойный парсер HTML на любом используемом вами языке должен учитывать это. В соответствии с вашей историей вопроса вы знакомы с Java, поэтому я предложил бы захватить Jsoup для этого.