Как конвертировать XML-файл в UTF-8 с помощью Groovy Builder StreamingMarkupBuilder

Даже если предмет вопроса кажется сложным, проблема довольно проста.

Я создаю файл XML с помощью следующего скрипта:

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 {}
}

Затем, когда я анализирую этот файл, используя такой код:

def xml = new XmlSlurper().parse(xmlFile)

Я получил следующее MalformedByteSequenceException исключение:

Исключение: Неверный байт 2 3-байтовой последовательности UTF-8

И если я конвертирую файл в формате UTF-8 (например, с помощью Notepad++), тогда все в порядке.

Итак, что я могу сделать, чтобы сохранить мой файл в формате UTF-8? Почему код mb.encoding = "UTF-8" не делает это?

Спасибо

1 ответ

Решение

Вам нужно обернуть средство записи выходного потока вокруг FileOutputStream, если utf-8 не является кодировкой по умолчанию

new OutputStreamWriter(new FileOutputStream(exportXmlFile),'utf-8') << mb.bind {
    mkp.xmlDeclaration()
    out << "\n"
    someMarkup {}
}

Я не уверен, что делает установка mb.encoding, вероятно, просто устанавливает кодировку в заголовке xml

Другие вопросы по тегам