PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : (Java) Http-Stream encoding


Tabi
2010-03-04, 20:23:42
Hallo,
ich versuche gerade (spezielle) Daten eines Http-Responses (UrlConnection Inputstream) zu parsen und bin dabei stets gescheischert, da die Daten keinen Sinn ergaben...

So nach 2 Stunden Debuggen, habe ich mal ein blick in den WireShark geworfen. Das Ergebnis:


1. ers6:W.y/..e
2. ers6:W³y/Õe


1. ist dabei die Ausgabe von WireShark und 2. ist das Ergebnis nach dem einlesen in Java.


So, meine Frage ist nun, wie bekomme ich einen "Standard-Stream"?

Ich habe auch schon mit dem InputStreamReader samt Encoding gespielt:
BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream(), "UTF-8"));
aber egal welches Encoding ich da nehme, es sind nie die "Originalen" Daten.


Hoffe auf Ratschläge :)

Berni
2010-03-04, 20:46:17
Wieso verwendest du nicht einfach getContent bzw. die entsprechenden getHeaderField-Methoden (hiervon gibts mehrere je nachdem was du brauchst) um an den Wert zu kommen?
Ansonsten müsstest du eher mal per Wireshark in Hex anschauen was da kommt. Die Punkte sind ja nicht darstellbare Zeichen.

Gast
2010-03-04, 21:10:42
Ich hatte ja geschrieben, dass ich den Stream von einer UrlConnection habe, d.h. ich habe bereits im vorfeld einen normalen Http-Request abgesetzt.

Das Resultat (gewähnlich eine Web-Seite; hier binäre Daten) bekommt man vom Stream...und hierbei eben das benannte Problem.


Zwecks WireShark, ich verstehe nciht ganz was ich mit den Hex-Werten dann anfangen soll? Also den Deizimalen wert kann ich schnell rausfinen...nur was dann?

ThePsycho_Gast
2010-03-04, 21:50:52
Ich denke schon, dass Berni richtig liegt. Dort wo Java "³" oder "Õ" anzeigt, macht Wireshark eben Punkte - die Daten sind aber vermutlich identisch.

Lass dir die Zahlenwerte der Bytes ausgeben, indem du read() verwendest und vergleiche mit den Zahlen in Wireshark.


Ansonsten mal prüfen, was connection.getContentEncoding() sagt. Sollte bei binären Daten aber eh egal sein, da Methoden verwendet werden sollten, die sich mit binären Datenvertragen und diese kein Encoding berücksichtigen.

Pinoccio
2010-03-04, 22:00:17
Kannst du uns die Domain verraten und/oder ein wenig Quelltext posten?

mfg

Gast
2010-03-04, 22:33:13
Problem ist behoben...bin wohl grad zu verpeilt zum arbeiten.

Es hat sich die ganze Zeit um einen gezippten Stream gehandelt :/


Warum aber Java den Stream nciht korrekt in einen String lesen konnte, verstehe ich allerdings trotzdem nicht. Habe die Dezimalen werte überprüft und diese sind nicht identisch. Es tut zwar nichts mehr zur Sache, aber wunderlich ist es schon.

Der Code der verwendet wurde:
public static LinkedList<String> readStream(InputStream stream) throws IOException {
LinkedList<String> requestLines = new LinkedList<String>();
BufferedReader in = new BufferedReader(new InputStreamReader(stream));

String line;
while ((line = in.readLine()) != null && !line.equals(""))
requestLines.add(line);

return requestLines;
}