Чтение содержимого веб-страницы - PullRequest
2 голосов
/ 31 мая 2011

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

String link = "some german link";

            URL url = new URL(link);
            BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream()));
            String inputLine;
            while ((inputLine = in.readLine()) != null) {
                System.out.println(inputLine);
            }

Ответы [ 4 ]

6 голосов
/ 31 мая 2011

Вам необходимо указать набор символов для вашего InputStreamReader, например

InputStreamReader(url.openStream(), "UTF-8") 
2 голосов
/ 31 мая 2011

Вы должны установить правильную кодировку.Вы можете найти кодировку в заголовке HTTP:

Content-Type: text/html; charset=ISO-8859-1

Это может быть перезаписано в (X) HTML-документе, см. Кодировки символов HTML

Я могу себе представитьчто вы должны рассмотреть много различных дополнительных вопросов для парсинга веб-страницы без ошибок.Но для Java доступны разные клиентские библиотеки HTTP, например org.apache.httpcomponents.Код будет выглядеть так:

DefaultHttpClient httpclient = new DefaultHttpClient();
HttpGet httpGet = new HttpGet("http://www.spiegel.de");

try
{
  HttpResponse response = httpclient.execute(httpGet);
  HttpEntity entity = response.getEntity();
  if (entity != null)
  {
    System.out.println(EntityUtils.toString(entity));
  }
}
catch (ClientProtocolException e) {e.printStackTrace();}
catch (IOException e) {e.printStackTrace();}

Это артефакт Maven:

<dependency>
  <groupId>org.apache.httpcomponents</groupId>
  <artifactId>httpclient</artifactId>
  <version>4.1.1</version>
  <type>jar</type>
  <scope>compile</scope>
</dependency>
0 голосов
/ 31 мая 2011

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

Если проблема не в этом, то ввод или вывод выполняется внеправильный набор символов.Наборы символов определяют, как число, представляющее символ, сопоставляется с глифами (или изображениями, представляющими символы).Java обычно использует UTF-8 для внутреннего использования;поэтому выходной поток, скорее всего, не проблема.Проверьте входной поток.

0 голосов
/ 31 мая 2011

Попробуйте установить Charset.

new BufferedReader(new InputStreamReader(url.openStream(), Charset.forName("UTF-8") ));
...