Kryptische Zeichen bei Webseiten auslesen?

Jejune

Grünschnabel
Hallo,
ich habe ein Problem und zwar folgendes:


ich lese mit folgendem Code Webseiten aus...also hole mir den html text...

das funktioniert meistens auch prächtig

nur manchmal also bei manchen Seiten bekomme ich statt den Html Code
nur kryptische Zeichen zurück
(also an der Seite liegts nicht....habe mit Wireshark meinen Traffic mitgeloggt, da wird mir der normale Html Code angezeigt der auch kommen sollte)

wieso kommen dann dann bei mir in Eclipse lauter so komische Zeichen anstatt meines html codes?


kennt sich jmd aus?



würde mir auch schon helfen, wenn mir jmd sagen könnte was genau das Problem ist :)

vielen vielen Dank schon mal


Code:
 URL de=new URL(url);
	          HttpURLConnection conn= (HttpURLConnection) de.openConnection();
	         
	          if (!cookie.equals(""))
	          conn.setRequestProperty("Cookie",cookie); 
	          conn.setRequestProperty("User-Agent","Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.8.1.17) Gecko/20080829 Firefox/2.0.0.17"); 
	          conn.setRequestProperty("Accept", "text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5 ");
	          conn.setRequestProperty("Accept-Language", "de-de,de;q=0.8,en-us;q=0.5,en;q=0.3");
	          conn.setRequestProperty("Accept-Encoding", "gzip,deflate");
	          conn.setRequestProperty("Accept-Charset", "ISO-8859-1,utf-8;q=0.7,*;q=0.7");
	          conn.setRequestProperty("Keep-Alive", "300");
	          conn.setRequestProperty("Connection","keep-alive");      
	          conn.connect();
	          BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream()));    
	          String str=" ";
	          String zeile;
	          while ((zeile=in.readLine()) != null)
	          	{ str=str+zeile;}
	          in.close();
	          conn.disconnect();  
	          setLastpage(url);  
                  return str;

so sieht das dann aus der falsche output

anstatt eben je nach webseite <html> inhalt......
http://s5b.directupload.net/file/d/1744/6edwsguk_jpg.htm
 
Zuletzt bearbeitet:
ich würde mal vermuten das deine eclipse-konsole nicht auf UTF8 ausgabeformat eingestellt ist
 
du hast vollkommend recht!
das war der falsche code schnipsel (das war der um den cookie auszulesen)

sooorrry!
jetzt hab ich den richtigen dort


zu Clash:

mhn meinste das ist UTF-8 und deswegen nicht zu erkennen ?
da wäre die frage, wo stell ich bei eclipse die Konsole auf utf-8 um

die andere Sache wäre, ich will auf dem String arbeiten
das ist natürlich mit utf-8 nicht möglich

wie bekomme ich den String in normales Format und sicher, dass es UTF-8 ist
habs mal mit String alterString =new String (UTF.getBytes(),"UTF-8"));
da hat sich nichts verbessert....
es hat sich was geändert, aber naja is immer noch nix lesbares
grml


hier mal was mir wireshark ausgibt für eine webpage wo es nicht geht, dass ichs richtig in java ausgegeben bekomme:

HTTP/1.1 200 OK\r\n
Request Version: HTTP/1.1
Response Code: 200
Date: Wed, 25 Mar 2009 16:53:54 GMT\r\n
Server: Apache/2.2.3 (Debian) PHP/5.2.0-8+etch11\r\n
X-Powered-By: PHP/5.2.0-8+etch11\r\n
Expires: Thu, 19 Nov 1981 08:52:00 GMT\r\n
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0\r\n
Pragma: no-cache\r\n
Content-Encoding: gzip\r\n
Vary: Accept-Encoding\r\n
Content-Length: 1632\r\n
Connection: close\r\n
Content-Type: text/html; charset=ISO-8859-1\r\n
Content-encoded entity body (gzip): 1632 bytes -> 6276 bytes

Line-based text data: text/html
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">\n
usw....

also da kommts wie gesgat korrekt an
 
Zuletzt bearbeitet:
Code:
HTTP/1.1 200 OK\r\n
          Request Version: HTTP/1.1
          Response Code: 200
Date: Wed, 25 Mar 2009 16:53:54 GMT\r\n
Server: Apache/2.2.3 (Debian) PHP/5.2.0-8+etch11\r\n
X-Powered-By: PHP/5.2.0-8+etch11\r\n
Expires: Thu, 19 Nov 1981 08:52:00 GMT\r\n
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0\r\n
Pragma: no-cache\r\n
Content-Encoding: gzip\r\n
Vary: Accept-Encoding\r\n
Content-Length: 1632\r\n
Connection: close\r\n
Content-Type: text/html; charset=ISO-8859-1\r\n
Content-encoded entity body (gzip): 1632 bytes -> 6276 bytes

Ich sehe:
Content-Encoding: gzip
Content-Type: text/html; charset=ISO-8859-1

http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html

Bitte Abschnitt 14.11 und 14.17 konsultieren
 
Zuletzt bearbeitet:
ich meine mich zu errinnern das man das unter "general" einstellen kann....
eventuell hilft dir
Code:
URLDecoder.decode(<String>,"UTF-8");
es gibt auch noch die StringEscapeUtils Klasse aus der commons bibliothek
http://commons.apache.org/lang/
die eine Methode unescapeHtml(<String>) hat vielleicht bringt das was
 
ich würde mal vermuten das deine eclipse-konsole nicht auf UTF8 ausgabeformat eingestellt ist
UTF-8 sieht anders aus. Insbesondere sollten alle Zeichen aus dem ASCII-Zeichensatz korrekt dargestellt werden.

hier mal was mir wireshark ausgibt für eine webpage wo es nicht geht, dass ichs richtig in java ausgegeben bekomme:

HTTP/1.1 200 OK\r\n
Request Version: HTTP/1.1
Response Code: 200
Date: Wed, 25 Mar 2009 16:53:54 GMT\r\n
Server: Apache/2.2.3 (Debian) PHP/5.2.0-8+etch11\r\n
X-Powered-By: PHP/5.2.0-8+etch11\r\n
Expires: Thu, 19 Nov 1981 08:52:00 GMT\r\n
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0\r\n
Pragma: no-cache\r\n
Content-Encoding: gzip\r\n
Vary: Accept-Encoding\r\n
Content-Length: 1632\r\n
Connection: close\r\n
Content-Type: text/html; charset=ISO-8859-1\r\n
Content-encoded entity body (gzip): 1632 bytes -> 6276 bytes

Line-based text data: text/html
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">\n
usw....

also da kommts wie gesgat korrekt an
Zwei Probleme:
  1. Du hast mit der Zeile conn.setRequestProperty("Accept-Encoding", "gzip,deflate"); angegeben, dass du einen mit gzip oder deflate komprimierten Datenstrom empfangen kannst. Genau das passiert hier nämlich: der Server hat die Seite mit gzip komprimiert, du siehst hier also den komprimierten Datenstrom. Entweder du lässt diese Zeile also weg oder du behandelst komprimierte Daten entsprechend.
  2. Du kannst nicht mit Wireshark umgehen ;-] Wireshark zeigt in bestimmten Ansichten gleich den dekomprimierten Datenstrom an. Wenn du stattdessen z.B. im Kontextmenü eines Paketes auf "Follow TCP Stream" klickst, siehst du was wirklich ankommt (und das ist auch das was dein Java-Programm "sieht").

Grüße, Matthias
 
super riesen thx euch, ich habs jetzt.

hat im Endeffekt gereicht wie Matthias gemeint hat das conn.setRequestProperty("Accept-Encoding", "gzip,deflate");
wegzulassen
und ja ich kann nicht so toll mit Wireshark umgehen *g*, war froh als ich das überhaupt dazu gebracht hab irgendwas mitzuloggen ^^


also danke euch allen! :)
 

Neue Beiträge

Zurück