Java Falsche Darstellung von Umlauten bei einer URL-Connection

zionskind

Newbie
Registriert
Jan. 2005
Beiträge
5
Hallo zusammen,

ich hoffe es kann mir jemand helfen, da ich an diesem Problem schon ein paar Tage zugange bin. Ich habe mir ein ByteArrayOutputStream erzeugt, das meine xml-Daten enthält. Dieses möchte ich nun an einen Acrobat-Server schicken, welcher mir daraus mein PDF bastelt. Leider kommen dort schon Ersetzungen der Umlaute durch ?-Zeichen an. Mein Code-Auszug ist folgender:

ByteArrayOutputStream xmlOutputStream = exporter.execute(example);
String requestContent = "form=" + "test_PDF" + "&langFlag=" + "de" + "&xmlData="
+ URLEncoder.encode(xmlOutputStream.toString(), "ISO-8859-1");

URL url = new URL(Configuration.getInstance().getEDocServerURL());
URLConnection conn = url.openConnection();
conn.setDoOutput(true);

DataOutputStream requestStream = new DataOutputStream(conn.getOutputStream());
requestStream.writeBytes(requestContent);
requestStream.flush();
requestStream.close();

Vielen Dank im voraus für Eure Hilfe!
 
Welche Encoding erwartet der Acrobat-Server? Wirklich ISO-8859-1?

Welche Zeichen werden denn durch die Mangel gedreht? Das obige ISO-Encoding kann nicht alle Zeichen fassen.
 
ISO-8859-15 ist nur marginal besser...

Wenn der TE eine Wahl hat (Kann ja sein, dass der Server nur bestimmte Encodings kann),
dann sollte eine Unicode-Encoding verwendet werden wie z.B. UTF-8.
 
Es werden alle Umlaute (äöüß) durch die "Mangel" gedreht und durch ?-Zeichen ersetzt.

Der Acrobat-Server erwartet auch ISO-8859-1. Ich konnte das Problem auch schon eingrenzen. Wenn ich aus meiner lokalen IDE (Eclipse) auf einer WinXP-VM den JBoss-Server mit der Anwendungs-EAR starte und den Acrobat-Server anspreche, funktioniert es einwandfrei.

Schiebe ich das EAR in den JBoss auf dem Entwicklungsserver (Linux-Maschine) und starte von da aus die PDF-Erzeugung, fliegen mir die Umlaute um die Ohren. Kann es sein, dass ich am JBoss oder Linux auf der Entwicklungsmaschine noch etwas Hand anlegen muss?

Trotzdem schon mal Danke an eure Posts. Hab natürlich auch die anderen ISO-Zeichensätze getestet!
 
hmm... Wir könnten auf den richtigen Weg sein. locale sagt:

LANG=en_US.UTF-8
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
 
Nein das ist völlig ok. UTF-8 ist schon die richtige Einstellung für locale. Hmm. Ob java die locale abgreift oder was eigenes will? Hmm… Fraglich auch wie die Datei zwischengespeichert wird, bevor sie an den Adobeserver gesendet wird. Kannste das mal zum Debuggen speichern und nopasten, oder selber anschauen, ob bereits da die Fragezeichen enthalten sind?
 
Ich habe mir mal den requestContent von der Linux-Maschine im Log direkt nach dem URL-Encode des xmlOutPutStreams ausgeben lassen. Da stehen im Log schon die Fragezeichen (%3F) für alle Umlaute drin. Ich muss mal schauen was

ByteArrayOutputStream xmlOutputStream = exporter.execute(example)

liefert.
Ergänzung ()

Auf der Linux-Maschine kommt echt schon im Objekt xmlOutPutStream "Murx" bei den Umlauten an. Unfassbar!!!
 
Ok, manchmal muss man auch direkt am Datenursprung schauen, ob noch alles ok ist :)

Hätte aber auch die Netzkommunikation als erstes unter Verdacht gehabt...
 
Du solltest bei dem Request drauf achten, dass die entsprechenden HTTP Header korrekt gesetzt sind. Da du ne XML-Datei hochladen willst rate ich dir davon ab application/x-www-form-urlencoded zu verwenden. Es macht eher Sinn auf einen Multipart Upload (multipart/form-data) zu setzen.
 
Schau dir mal den "-Dfile.encoding" Parameter der JRE an. Vllt hilft dir das weiter...
 
Zurück
Oben