3 Stimmen

Wie kann man mit Java eine HTML-Seite in der richtigen Kodierung abrufen?

Wie kann ich einen HTTP-Stream mit einer HTML-Seite in der Kodierung der Seite lesen?

Hier ist ein Codefragment, das ich verwende, um den HTTP-Stream zu erhalten. InputStreamReader hat das optionale Argument encoding, aber ich habe keine Ahnung, wie ich es bekommen kann.

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

4voto

cletus Punkte 596503

Der Abruf einer Webseite ist ein recht komplizierter Vorgang. Deshalb gibt es Bibliotheken wie HttpClient existieren. Mein Rat ist, dass, wenn Sie einen wirklich zwingenden Grund anders haben, verwenden Sie HttpClient.

1 Stimmen

Update . HttpClient wurde ersetzt durch die Apache HttpKomponenten Projekt in seinem HttpClient y HttpCore-Module die eine bessere Leistung und mehr Flexibilität bieten.

3voto

Niger Punkte 3776

Wenn die Verbindung hergestellt ist durch

URLConnection conn = url.openConnection();

Sie können den Namen der Kodierungsmethode über url.getContentEncoding() erhalten und diesen String an InputStreamReader() übergeben, so dass der Code wie folgt aussieht

BufferedReader d = new BufferedReader(new InputStreamReader(is,url.getContentEncoding()));

0 Stimmen

Es gibt keine Methode url.getContentEncoding() :-(

0 Stimmen

0 Stimmen

Welche Version von Java verwenden Sie?

1voto

Yishai Punkte 87548

Die kurze Antwort lautet URLConnection.getContentEncoding() . Die richtige Antwort ist, was cletus vorschlägt: Verwenden Sie eine geeignete Bibliothek eines Drittanbieters, es sei denn, Sie haben einen zwingenden Grund, dies nicht zu tun.

0 Stimmen

Es gibt keine Selbstzufriedenheit, wenn der Code nicht von uns selbst geschrieben wird, sondern von Dritten.

1voto

Sebi Punkte 7545

Ich hatte kürzlich ein sehr ähnliches Problem zu lösen. Wie die anderen Antworten habe auch ich angefangen, mit HttpClient und Co. herumzuspielen. Allerdings erfordern diese Bibliotheken, dass man die Kodierung der Datei, die man herunterladen möchte, im Voraus kennt. Andernfalls führt die Konvertierung der abgerufenen HTML-Datei zu unlesbaren Zeichen.

Dieser Ansatz wird nicht funktionieren, da die Kodierung der HTML-Datei nur in der HTML-Datei selbst angegeben wird. Je nach HTML-Version wird die Kodierung auf viele verschiedene Arten angegeben, z. B. im XML-Header, in zwei verschiedenen head-Meta-Tag-Elementen usw. Wenn Sie diesen Ansatz verfolgen, müssten Sie dies tun:

  1. Laden Sie die Datei herunter und sehen Sie sich den Inhalt an, um die Kodierung durch Parsen des HTML-Inhalts zu ermitteln.
  2. Laden Sie die Datei ein zweites Mal herunter, um die richtige Kodierung anzugeben.

Insbesondere das Parsen von HTML-Inhalten für die korrekte Kodierung von Zeichenketten ist fehleranfällig. Stattdessen schlage ich vor, dass Sie sich auf eine Bibliothek wie JSoup die Ihnen die Arbeit abnimmt. Anstatt also die Datei über httpclient herunterzuladen, können Sie JSoup verwenden, um die Datei für Sie abzurufen. Außerdem bietet JSoup eine nette API für den direkten Zugriff auf verschiedene Teile der HTML-Seite (z. B. den Seitentitel).

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X