StAX - Einstellung der version und Kodierung mit XMLStreamWriter
Bin ich mit dem StAX für die Erstellung von XML-Dateien und validieren Sie die Datei mit und XSD.
Ich erhalte eine Fehlermeldung beim erstellen der XML-Datei:
javax.xml.stream.XMLStreamException: Underlying stream encoding 'Cp1252' and input paramter for writeStartDocument() method 'UTF-8' do not match.
at com.sun.xml.internal.stream.writers.XMLStreamWriterImpl.writeStartDocument(XMLStreamWriterImpl.java:1182)
Hier ist der Codeausschnitt:
XMLOutputFactory xof = XMLOutputFactory.newInstance();
try{
XMLStreamWriter xtw = xof.createXMLStreamWriter(new FileWriter(fileName));
xtw.writeStartDocument("UTF-8","1.0");} catch(XMLStreamException e) {
e.printStackTrace();
} catch(IOException ie) {
ie.printStackTrace();
}
Mir läuft dieser code unter Unix. Weiß jemand, wie die version und encoding-Stil?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich würde versuchen, die
createXMLStreamWriter()
mit einem output-parameter zu.[BEARBEITEN] Versucht, es funktioniert durch die änderung der createXMLStreamWriter Linie:
[EDIT 2] habe einen unwesentlich komplexeren test, für das Protokoll:
Sollte dies funktionieren:
Vom code ist es schwer zu wissen, für sicher, aber wenn Sie verlassen sich auf die Standard-Stax-Implementierung, JDK 1.6 bietet (Sonne sjsxp) würde ich empfehlen ein Upgrade auf die Verwendung Woodstox.
Es ist bekannt, dass weniger buggy als Sjsxp, unterstützt das ganze Stax2 API und wurde aktiv entwickelt und unterstützt werden (während die Sonne version wurde gerade geschrieben und hat es begrenzte Anzahl von bug-fixes).
Aber der Fehler im code ist dieser:
Sie befinden sich auf der Standard-Plattform-Codierung (die CP-1252, windows?). Sie sollten immer die explizite Angabe der Codierung Sie mithilfe der. Stream-writer ist nur die überprüfung, dass Sie nicht etwas gefährlich, und entdeckt Unstimmigkeiten, die verursachen können, korrupte Dokument. Ziemlich smart, was eigentlich darauf hindeutet, dass diese nicht die Standard-Stax-Prozessor. 🙂
(die andere Antwort Punkte eine richtige Abhilfe zu, durch die nur auf der Durchreise Ausgabestrom und Codierung lassen XMLStreamWriter das richtige tun)
Wenn Sie mit der Standard -
XMLStreamWriter
gebündelt mit dem Oracle JRE/JDK sollten Sie immerXMLStreamWriter
ausdrücklich die Einstellung der Zeichencodierung:xmlOutputFactory.createXMLStreamWriter(in, encoding)
xmlStreamWriter.writeStartDocument(encoding, version)
. Der Schriftsteller ist nicht schlau genug, die Erinnerung an die Codierung gesetzt wird, wenn die writer erstellt wurde. Jedoch, es wird überprüft ob diese Codierungen sind die gleichen. Siehe code unten.Diese Weise, wird Ihre Datei die Codierung und XML-Deklaration sind immer in sync. Obwohl die Angabe der Kodierung in der XML-Deklaration ist optional, XML-beste Praxis ist, immer angeben.
Dies ist der code von Oracle (Sun) Umsetzung (Sjsxp):