Hallo allerseits,
ich habe gerade mein Problem (provisorisch) gelöst, ich will aber wissen, warum das so ist und was ich tun kann um das zu vermeiden:
Ich will eine (auch binäre) Datei aus dem Netz mittels Java laden und in eine Datei speichern. Dazu habe ich zunächst eine Prüfung gemacht, mit welcher Kodierung die Daten geschickt werden (wenn's doch eine html-Datei sein sollte). Anschließend steht grob dieser Code:
Wenn der Server keine Kodierung angibt (z.B. beim Laden einer binären Datei) muss ich ja einen default-Wert für charset geben.
Wenn ich hier den "richtigen" Wert (ISO-8859-1) einstelle, ist die Datei nach dem Download auch in Ordnung, sonst kommt da nur murks raus.
Das wundert mich leicht, da ich ja theoretisch zunächst im InputStreamReader dekodiere (also ISO -> UTF) und dann die Zeichen (deren int-Representation) wieder im OutputStreamWriter encodieren (UTF -> ISO).
Theoretisch müsste da doch am Anfang und am Ende das gleiche rauskommen unabhängig von der Kodierung, oder? Ich meine, die dekodierung wird ja im nächsten Schritt wieder rückgängig gemacht.
Theoretisch arbeitet Java ja intern mit UTF. Daher wollte ich eigentlich auf UTF als default stellen. Aber ich kann momentan nur ISO stehen lassen.
Was mache ich falsch/wo denke ich verquert?
Danke
Christian
ich habe gerade mein Problem (provisorisch) gelöst, ich will aber wissen, warum das so ist und was ich tun kann um das zu vermeiden:
Ich will eine (auch binäre) Datei aus dem Netz mittels Java laden und in eine Datei speichern. Dazu habe ich zunächst eine Prüfung gemacht, mit welcher Kodierung die Daten geschickt werden (wenn's doch eine html-Datei sein sollte). Anschließend steht grob dieser Code:
Code:
File datei = (...);
Charset charset = (...);
FileOutputStream fout = new FileOutputStream(datei);
InputStreamReader ir;
OutputStreamWriter out;
ir = new InputStreamReader(con.getInputStream(), charset);
out = new OutputStreamWriter(fout, charset);
int val;
while ((val = ir.read()) != -1) {
out.write(val);
}
ir.close();
out.flush();
out.close();
Wenn der Server keine Kodierung angibt (z.B. beim Laden einer binären Datei) muss ich ja einen default-Wert für charset geben.
Wenn ich hier den "richtigen" Wert (ISO-8859-1) einstelle, ist die Datei nach dem Download auch in Ordnung, sonst kommt da nur murks raus.
Das wundert mich leicht, da ich ja theoretisch zunächst im InputStreamReader dekodiere (also ISO -> UTF) und dann die Zeichen (deren int-Representation) wieder im OutputStreamWriter encodieren (UTF -> ISO).
Theoretisch müsste da doch am Anfang und am Ende das gleiche rauskommen unabhängig von der Kodierung, oder? Ich meine, die dekodierung wird ja im nächsten Schritt wieder rückgängig gemacht.
Theoretisch arbeitet Java ja intern mit UTF. Daher wollte ich eigentlich auf UTF als default stellen. Aber ich kann momentan nur ISO stehen lassen.
Was mache ich falsch/wo denke ich verquert?
Danke
Christian