如何使用Groovy建设者StreamingMarkupBuilder转换为UTF-8的XML文件
-
20-09-2019 - |
题
即使问题题目看起来很复杂,这个问题很简单。
我创建具有以下脚本的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头的字符集
不隶属于 StackOverflow