Как получить HTML-страницу в правильной кодировке с помощью Java?

StackOverflow https://stackoverflow.com/questions/1255730

  •  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 и т. д.Если вы будете следовать этому подходу, вам необходимо:

  1. Загрузите файл и просмотрите содержимое, чтобы определить кодировку путем анализа содержимого HTML.
  2. Загрузите файл второй раз, чтобы указать правильную кодировку.

Особенно подвержен ошибкам анализ HTML-контента на предмет правильных строк кодировки.Вместо этого я предлагаю вам положиться на такую ​​библиотеку, как JСуп, который сделает всю работу за вас.Поэтому вместо загрузки файла через httpclient используйте JSoup, чтобы получить файл за вас.Кроме того, JSoup предоставляет удобный API для прямого доступа к различным частям HTML-страницы (например,Заголовок страницы).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top