Как получить HTML-страницу в правильной кодировке с помощью Java?
-
12-09-2019 - |
Вопрос
Как я могу прочитать поток HTTP с HTML-страницей в кодировке страницы?
Вот фрагмент кода, который я использую для получения потока HTTP. ИнпутStreamReader имеет необязательный аргумент кодирования, но у меня нет идей о том, как его получить.
URLConnection conn = url.openConnection();
InputStream is = conn.getInputStream();
BufferedReader d = new BufferedReader(new InputStreamReader(is));
Решение
Получение веб-страницы — достаточно сложный процесс.Вот почему такие библиотеки, как HttpClient существовать.Мой совет: если у вас нет действительно веской причины, используйте HttpClient.
Другие советы
Когда соединение установлено через
URLConnection conn = url.openConnection();
вы можете получить имя метода кодирования через url.getContentEncoding(), поэтому передайте эту строку в InputStreamReader(), чтобы код выглядел так:
BufferedReader d = новый BufferedReader (новый InputStreamReader (is, url.getContentEncoding ()));
Короткий ответ: URLConnection.getContentEncoding().Правильный ответ — то, что предлагает Клетус: используйте соответствующую стороннюю библиотеку, если у вас нет веских причин не делать этого.
Недавно мне пришлось решить очень похожую проблему.Как и другие ответы, я также начал экспериментировать с HttpClient и др.Однако эти библиотеки требуют, чтобы вы заранее знали кодировку файла, который хотите загрузить.В противном случае преобразование полученного HTML-файла приведет к появлению нечитаемых символов.
Этот подход не будет работать, поскольку кодировка HTML-файла указана только в самом HTML-файле.В зависимости от версии HTML кодировка указывается разными способами, например, заголовок XML, два разных элемента метатега head и т. д.Если вы будете следовать этому подходу, вам необходимо:
- Загрузите файл и просмотрите содержимое, чтобы определить кодировку путем анализа содержимого HTML.
- Загрузите файл второй раз, чтобы указать правильную кодировку.
Особенно подвержен ошибкам анализ HTML-контента на предмет правильных строк кодировки.Вместо этого я предлагаю вам положиться на такую библиотеку, как JСуп, который сделает всю работу за вас.Поэтому вместо загрузки файла через httpclient используйте JSoup, чтобы получить файл за вас.Кроме того, JSoup предоставляет удобный API для прямого доступа к различным частям HTML-страницы (например,Заголовок страницы).