xml 使用不带 BOM 的 UTF-8 编码 groovy

xml using encoding UTF-8 witout BOM groovy

您好,我需要使用 MarkupBuilder class 在 groovy 中创建一个 XML 文件,xml 文件应该使用不带 BOM 的编码 utf-8。

这是我生成标记构建器并添加编码的代码

    def textXML = new StringWriter()
    def builder = new groovy.xml.MarkupBuilder(textXML)
    builder.setDoubleQuotes(false)
    builder.setOmitNullAttributes(true)
    builder.setOmitEmptyAttributes(true)
    builder.mkp.xmlDeclaration(version: "1.0", encoding: "utf-8")
    //some more code

此代码创建 xml 文件

  def file = new File("fileXml.xml")
  file << textXML

但是生成 xml 总是使用 BOM

编码 utf-8

如何解决? 谢谢!

UTF-8 BOM(字节顺序标记)始终是文件的前三个字节。您可以简单地删除它们。

我会这样做:

def textXML = new StringWriter()
def builder = new groovy.xml.MarkupBuilder(textXML)
builder.setDoubleQuotes(false)
builder.setOmitNullAttributes(true)
builder.setOmitEmptyAttributes(true)
builder.mkp.xmlDeclaration(version: "1.0", encoding: "utf-8")

def xmlbytes = textXML.toString().getBytes().flatten()
xmlbytes.remove(0)
xmlbytes.remove(0)
xmlbytes.remove(0)

def file = new File("fileXml.xml")
file << xmlbytes

我就是这样做的。请原谅我 Groovy 的 java-ness -- 旧习难改。

所以我的情况略有不同。我正在尝试使用 MarkupBuilder 编写 XML 并显示 BOM(新客户要求)。到目前为止,我尝试的一切都只产生一个没有 BOM 的纯文本 XML 文件。这是我的示例代码:

import groovy.xml.MarkupBuilder

def writer = new StringWriter()
def xml = new MarkupBuilder( writer )
xml.setDoubleQuotes(false)
xml.setOmitNullAttributes(true)
xml.setOmitEmptyAttributes(true)
xml.mkp.xmlDeclaration(version: "1.0", encoding: "utf-8")

xml.quote() {
 xml.quote_details() {
  xml.detail() {
   xml.quoteId('Q1339', type:'FCL')
  }
 }
}
new FileOutputStream('UTF_test.xml').withWriter('UTF-8') { w ->
  w.write('ABC')
  w << writer
}

"ABC" 将显示在文件中,但没有 BOM。我的备份计划是自己导出字符,但这似乎不太优雅。