ISO-8859-1 und UTF-8

redbomber

Bekanntes Mitglied
Hey zusammen, ich brauche eure Hilfe:

Ich lese ein XML Dokument ein, welches in "ISO-8859-1" kodiert ist.
Dann ändere ich ein paar Knoten und mache darauf wieder das XML Dokument.

Dieses ist dann im Format "UTF-8".

Das Problem ist nun dass alle Sonderzeichen im Original XML Dokument ("ISO-8859-1" - z.B. Umlaute) in dem neu erstellten XML Dokument ("UTF-8") falsch (mit undefinierten Zeichen) dargestellt werden.
Das XML Dokument enthält somit Fehler.

Nun meine Frage wie ich das Problem beheben kann? Hier die Methoden mit denen ich das XML File einlese und wieder schreibe:
Als Parser verwende ich den DOM Parser.

Java:
public static Document createDocument(File aFile)
			throws IllegalArgumentException, ParserConfigurationException,
			SAXException, IOException {

		DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
		DocumentBuilder db;
		Document doc = null;
		db = dbf.newDocumentBuilder();
		doc = db.parse(aFile);
	        return doc;
}

public static boolean createXML(Document aDoc, File aFile)
			throws IOException {

		XMLSerializer serializer = new XMLSerializer(new OutputFormat());
		serializer.setOutputCharStream(new FileWriter(aFile));
		serializer.serialize(aDoc);
		return true;
}
 

eRaaaa

Top Contributor
Probiere mal die Zeile 17 wie folgt zu ändern
Java:
serializer.setOutputCharStream(new OutputStreamWriter(new FileOutputStream(aFile),"ISO-8859-1"));

zusätzlich dann vllt. noch ein
Java:
serializer.setOutputFormat(new OutputFormat(aDoc, "ISO-8859-1", true));

sonst wird defaultmäßig UTF-8 als encoding in der XML geschrieben!
 

redbomber

Bekanntes Mitglied
hmm, habe eben festgestellt dass ich in der Methode createDocument(File aFile) schon einen Fehler bekomme.
Die Datei die ich einlesen möchte ist in "ISO-8859-1" kodiert. Der DocumentBuilder versucht wohl in UTF-8 enizulesen.
Als Fehler erhalte ich dann : "Invalid byte 1 of 1-byte UTF-8 sequence"
in Zeile 9...

Wisst ihr ob der DocumentBuilder einfach keine XML-Dateien einlesen kann welche in "ISO-8859-1" kodiert sind?
 

redbomber

Bekanntes Mitglied
also ich bin schon einmal einen Schritt weiter:

ich befolge die folgende Anweisung:

1) Create an InputStreamReader from a FileInputStream specifying the encoding as "iso-8859-1".
2) Create an InputSource from the InputStreamReader.
3) Use the InputSource as an argument to the parse() method.

wodurch ich das File wieder einlesen kann.
durch deinen Tip eRaaaa:
Probiere mal die Zeile 17 wie folgt zu ändern
Java:
serializer.setOutputCharStream(new OutputStreamWriter(new FileOutputStream(aFile),"ISO-8859-1"));

schreibe ich auch wieder korrekt in das XML-File.


Also das funktioniert nun.

Jetzt aber nochmal eine Frage:

Mein XML-File besitzt einen Header:

<?xml version="1.0" encoding="ISO-8859-1"?>

bei dem eigentlich angegeben wird ob ISO oder UTF-8 verwendet wird. Kann ich den nciht irgendwie verwenden um zu bestimmen ob ich ISO bzw. UTF-8 einlesen/rausschreiben soll?
 
Zuletzt bearbeitet:
Ähnliche Java Themen

Ähnliche Java Themen


Oben