Как получить HTML-страницу в правильной кодировке с использованием Java? - PullRequest
2 голосов
/ 10 августа 2009

Как я могу прочитать поток HTTP с HTML-страницей в кодировке страницы?

Вот фрагмент кода, который я использую для получения потока HTTP. InputStreamReader имеет необязательный аргумент кодирования, но я не знаю, как его получить.

URLConnection conn = url.openConnection();
InputStream is = conn.getInputStream();
BufferedReader d = new BufferedReader(new InputStreamReader(is));

Ответы [ 4 ]

4 голосов
/ 10 августа 2009

Получение веб-страницы является довольно сложным процессом. Вот почему существуют такие библиотеки, как HttpClient . Мой совет: если у вас нет веских причин, используйте HttpClient.

3 голосов
/ 10 августа 2009

Когда соединение установлено через

URLConnection conn = url.openConnection ();

вы можете получить имя метода кодирования через url.getContentEncoding (), поэтому передайте эту строку в InputStreamReader (), чтобы код выглядел как

BufferedReader d = новый BufferedReader (новый InputStreamReader (is, url.getContentEncoding ()));

1 голос
/ 10 августа 2009

Краткий ответ: URLConnection.getContentEncoding () . Правильный ответ - то, что предлагает Cletus, используйте соответствующую стороннюю библиотеку, если у вас нет веских причин не делать этого.

0 голосов
/ 13 февраля 2013

Недавно мне пришлось решить очень похожую проблему. Как и другие ответы, я также начал играть с HttpClient et al. Однако эти библиотеки требуют, чтобы вы знали заранее кодировку файла, который вы хотите загрузить. В противном случае преобразование полученного HTML-файла приведет к нечитаемым символам.

Этот подход не будет работать, поскольку кодировка файла HTML указывается только в самом файле HTML. В зависимости от версии HTML кодировка указывается разными способами, такими как заголовок XML, два разных элемента метатега заголовка и т. Д. Если вы придерживаетесь этого подхода, вам необходимо:

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...