Как конвертировать XML-файл в UTF-8 с помощью Groovy Builder StreamingMarkupBuilder - PullRequest
0 голосов
/ 07 октября 2009

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

Я создаю 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" не делает этого?

Thx

1 Ответ

2 голосов
/ 07 октября 2009

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

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

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

...