如何使用Groovy构建器StreamingMarkupBuilder以UTF-8转换XML文件

时间:2009-10-06 23:15:12

标签: xml grails utf-8 groovy markupbuilder

即使问题主题看起来很复杂,问题也很简单。

我使用以下脚本创建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 个答案:

答案 0 :(得分:2)

你需要在FileOutputStream周围包装输出流编写器是utf-8不是默认的字符集

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

我不确定mb.encoding的设置是什么,可能只是在xml标头中设置字符集