Leerzeichen des Todes

tharo

Mitglied
Man man. Hallo euch allen. Nach inzwischen mal wieder 2 Stunden googlen und darüber aufregen das man ALLES findet, nur nicht die Antwort auf den eigenen Fehler, habe ich mich dazu entschlossen hier nach zu fragen.

Eigentlich bin ich sicher. dass es ein totaler Anfängerfehler ist. So sehr, dass ich wirklich nicht drauf komme. Also:

Ich lese eine HTML Seite über die HttpURLConnection-Klasse ein. Selbige steht auch nicht zur Debatte sondern wird zwangsläufig verwendet.

Alles funktionierte ganz nett bis zu dem Zeitpunkt, als ich mich dem Quelltext zwecks Parsings zuwenden wollte:


< ! D O C T Y P E h t m l P U B L I C " - / / W 3 C / / D T D H T M L 4 . 0 1 T r a n s i t i o n a l / / E N " >
< h t m l >

Toll dacht ich mir. Er interpretiert scheinbar die in Unicode codierte Page als ASCII und setzt nun überall \0 Zeichen dazwischen. Tut er auch. Ursache gefunden. Aber Lösung? Fehlanzeige. Die versuche dem InputStreamReader mitzuteilen er solle das Fixen schlugen fehl. Ich habs auch mal per byte-encoding versucht, doch dass machte alles eigentlich nur noch schlimmer.

Also. Wo ist mein Fehler? <.<
Und nun bitte keine "lösch die \0'er doch einfach raus" Vorschläge bitte o.O ... das Script muss später unter sehr hoher Last funktionieren.

Code:
		StringBuffer body = new StringBuffer();
		HttpURLConnection httpCon = (HttpURLConnection)(myUrl).openConnection();

		InputStreamReader isr = new InputStreamReader(httpCon.getInputStream());
		BufferedReader in = new BufferedReader(isr);
		while (in.ready()) {
			body.append( in.readLine() + "\n");
		}

		System.out.println( body.toString() );
 
Schonmal versucht dem InputStreamReader zu sagen, dass er als Charset nen Unicode-Charset verwenden soll?
 
Habe mit deinem Code ein paar Seiten ausgegeben, da tauchen keine derartigen Leerzeichen auf.

SUSE Linux Enterprise Server 11 SP1 (x86_64)
LANG=en_US.UTF-8
 
Bei google.de funktioniert ja auch alles. Das Problem tritt bei "https://websmp206.sap-ag.de" auf.

Ja, ich habe schon die wichtigsten ISO- Unicode Charset's versucht gehabt. Bin aber dennoch für Vorschläge diesbezüglich offen.
 
Firefox sagt "Encoding: UTF-16".

Java:
InputStreamReader isr = new InputStreamReader(httpCon.getInputStream(), "UTF-16");
 
Danke, ich denke das wars. Bonusfrage: Jemand ne Idee wie man das Encoding mittels Java-Bordmitteln zuverlässig erkennt?
 
Zurück