Как конвертировать 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