Java Encoding von InputStreamReader

Xot

-
ID: 413078
L
26 November 2006
451
36
Hallo zusammen,

ich lese per
Code:
BufferedReader rd = new BufferedReader(
						new InputStreamReader(con.getInputStream()));
den HTML-Code einer Webseite ein und will diesen dann in meinem Programm weiterverwenden. Bei deutschen Webseiten funktioniert dies auch Problemlos... Jedoch wenn ich Webseiten die das "UTF8" Encoding beinhalten öffnen will, werden Umlaute als "ü" usw. ausgegeben... Gibt es irgend eine Möglichkeit, dass Java diese automatisch richtig umwandelt oder muss ich diese immer manel umwandeln?

Gruss
 
probier mal:
PHP:
BufferedReader rd = new BufferedReader(new InputStreamReader(con.getInputStream(), "UTF-8"));

verschiedene Encodings sind immer ein Problem, wenn es in Java keine Möglichkeit gibt dies automatisch festzustellen, ist es eine kompliziertere Sache, ist bei Browsern ja nicht anders.

Eine Methode, die auf jedenfall einfacher und sicherer ist, ist einen HTTP-Client in Java zu nutzen, wie zb aus den Apache Commons oder Jakarta, weiß gerade nicht zu welchem er gehört. Denn das HTML-Konstrukut muss das Encoding mitteilen, wodurch der HTML-Client dies einfach in einen gewünschten Zeichensatz übersetzen können sollte.
 
probier mal:
PHP:
BufferedReader rd = new BufferedReader(new InputStreamReader(con.getInputStream(), "UTF-8"));
Klappt eigentlich wie gewünscht bisher. Danke!
Wird das jedoch bei anderen Encodings zu Konflikten führen?

Eine Methode, die auf jedenfall einfacher und sicherer ist, ist einen HTTP-Client in Java zu nutzen, wie zb aus den Apache Commons oder Jakarta, weiß gerade nicht zu welchem er gehört.

Werde mich darüber mal genauer erkundigen. Danke für diese Idee.
 
Klappt eigentlich wie gewünscht bisher. Danke!
Wird das jedoch bei anderen Encodings zu Konflikten führen?

sehr unwahrscheinlich, meist wird iso-8859-1 oder dann gleich UTF-8 verwendet, beschwören will ich aber nicht, dass in bestimmten Regionen auf der Erde, diese auf ihren eigenen Zeichensatz und nicht UTF-8 setzen.
Aber dann wird es eine Sprache sein, die du nicht lesen kannst :biggrin:
 
es wäre die sicherste Lösung, aber ich bezweifle momentann, dass es nötig ist, wobei man mit so ner HTTPClient-Klasse mehr machen kann, und auch leichter.
 
  • Like
Reaktionen: Xot
es wäre die sicherste Lösung

Ich habe nun folgende Methode entdeckt die automatisch das richtige Encoding wählt:
Code:
URL url = new URL(elem.toString());
URLConnection con = url.openConnection();

BufferedReader rd = new BufferedReader(new InputStreamReader(con.getInputStream(), con.getContentEncoding()));

Mit con.getContentEncoding() wird automatisch das Encoding der Webseite gewählt und dann an den InputStreamReader weitergegeben.