即使问题题目看起来很复杂,这个问题很简单。

我创建具有以下脚本的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格式(使用记事本++例如),则一切正常。

所以,我能做些什么来拯救我的UTF-8格式的文件?为什么代码mb.encoding = "UTF-8"不去做呢?

THX

有帮助吗?

解决方案

您需要环绕一个FileOutputStream输出流写入器是UTF-8不是默认字符集

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

我不知道mb.encoding做什么设置,可能只是设置在XML头的字符集

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top