Wie XML-Datei in UTF-8 mit Groovy-Builder StreamingMarkupBuilder konvertieren
-
20-09-2019 - |
Frage
Auch wenn die Frage Gegenstand scheint kompliziert, das Problem ist ganz einfach.
ich eine XML-Datei mit folgendem Skript erstellen:
def xmlFile = new File("file-${System.currentTimeMillis()}.xml")
mb = new groovy.xml.StreamingMarkupBuilder()
mb.encoding = "UTF-8"
new FileWriter(xmlFile) << mb.bind {
mkp.xmlDeclaration()
out << "\n"
someMarkup {}
}
Dann, wenn ich diese Datei analysieren mithilfe von Code wie:
def xml = new XmlSlurper().parse(xmlFile)
Ich habe die folgende MalformedByteSequenceException
Ausnahme:
Ausnahme geworfen: Ungültige Byte 2 3-Byte-UTF-8-Sequenz
Und wenn ich die Datei in UTF-8-Format (mit Notepad ++ zum Beispiel) konvertiere dann alles in Ordnung ist.
Also, was kann ich tun, um meine Datei in UTF-8-Format speichern? Warum der Code mb.encoding = "UTF-8"
tut es nicht?
Thx
Lösung
Sie benötigen einen Ausgangsstrom Schriftsteller wickeln um ein Outputstream ist utf-8 ist nicht die Standard-charset
new OutputStreamWriter(new FileOutputStream(exportXmlFile),'utf-8') << mb.bind {
mkp.xmlDeclaration()
out << "\n"
someMarkup {}
}
Ich bin mir nicht sicher, welche Einstellung mb.encoding hat, vermutlich setzt nur den Zeichensatz in dem XML-Header