Zeichenprobleme (UTF8?)

T

Toni

Gast
Hallo zusammen,
Ich habe ein Servlet welches Daten im XML Format entgegen nimmt.

Java:
byte[] contentBytes = null;

		try {
			// get whole input message into byte array buffer 
			ByteArrayOutputStream buffer = new ByteArrayOutputStream();
			BufferedInputStream bis = new BufferedInputStream(request.getInputStream());
			int read = -1;
			do {
				byte[] buf = new byte[1024];
				read = bis.read(buf);
				if(read > 0) {
					buffer.write(buf, 0, read);
				}
			} while(read > 0);
			contentBytes = buffer.toByteArray();

                        // determine character encoding from header 		
			String charEncoding = request.getCharacterEncoding();
			if(charEncoding == null) {
				charEncoding = "UTF-8";
			}

                        String contentStr = new String(contentBytes, charEncoding);

...

Mit dem contentBytes Array baue ich mir später mein Document auf. Das funktioniert auch alles wunderbar, allerdings bekomme ich Probleme wenn meine an das Servlet gesendete XML Nachricht Sonderzeichen (Umlaute und dergleichen) enthält.
Es scheint so, als würde an irgendeiner Stelle eine falsche Codepage verwendet werden. Leider finde ich nicht wirklich wo es herkommt.

Vielleicht hat einer einen Tipp für mich, ist in obenstehendem Code irgendetwas fehlerhaft?

MfG,
Toni
 
T

Toni

Gast
Hi,
Danke für deine Antwort!

Meine XML Nachricht verschicke ich per HTTP.
Die erste Zeile des Payloads sieht wie folgt aus:

<?xml version="1.0" encoding="UTF-8"?>
 

homer65

Top Contributor
Hi,

Meine XML Nachricht verschicke ich per HTTP.
Die erste Zeile des Payloads sieht wie folgt aus:

<?xml version="1.0" encoding="UTF-8"?>

Steht da immer UTF-8? Falls ja, kannst du ja auch beim Umsetzen des Byte Arrays in einen string immer UTF-8 verwenden und nicht das Encoding aus dem Request. Das Encoding des Request hatt unter Umständen nichts mit dem Encoding des XML Dokuments zu tun.
 
T

Toni

Gast
Leider habe ich später keinen Einfluss auf das eingehende XML Dokument, es könnte also auch ein anderes Encoding im XML Header stehen.

Ich hab auch schon versucht, bei der Stringerzeugung per default "UTF-8" zu verwenden, leider funktionieren die Sonderzeichen selbst dann nicht.

Ohne Sonderzeichen läuft es wie gesagt problemlos durch, mit Sonderzeichen werden dann allerdings nicht nur die Sonderzeichen nicht umgesetzt, sondern zusätzlich wird auch noch die xml Struktur (< > ) zerstört.
 

DerEisteeTrinker

Bekanntes Mitglied
ist logisch, weil er mit den Darstellungen durcheinander kommt.

Du musst dann die "fehlerhaften" Dokumente einfach abweisen. Anders kannst du dem Problem nicht entgegen kommen. Denn sonst hast du eine eierlegende Wollmilchsau.
 

homer65

Top Contributor
Es gibt auch noch die Möglichkeit das Document als DOM einzulesen; in etwa so:
Code:
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
try
{
 DocumentBuilder db = dbf.newDocumentBuilder();
 Document dom = db.parse(request.getInputstream());
 ...
}
Und dann mit dem dom weiterarbeiten.
 

DerEisteeTrinker

Bekanntes Mitglied
Also ich würde da kein DOM verwenden. Denn DOM heißt ja, dass das ganze XML im Speicher abgelegt wird. Bei kleinen Dateien würde das vllt gehen, aber ich würde einfach per Buffer eine feste Länge einlesen am Anfang und da muss dann UTF-8 drin stehen und wenn nicht, dann wird garnicht weiter verarbeitet etc.
 

Ähnliche Java Themen

Neue Themen


Oben