VTD-XML:com.ximpleware.ParseException中的异常:XML decl错误:无法将编码切换为UTF-8

时间:2018-02-02 10:33:41

标签: xml scala utf-16 vtd-xml

我有使用UTF-16编码的xml,我在Scala中编写了代码,使用VTD-GEN lib解析它并获得以下异常。 任何帮助都会非常明显。 线程“main”中的异常com.ximpleware.ParseException:XML decl错误:无法将编码切换为UTF-8。

以下是代码SNIPPET

val xml = Source.fromURL(getClass.getResource("/sample.xml")).mkString.
val xmlStr = extractApnXML(xml)
println(xmlStr)
val encodingStr = identifyEncoding(xmlStr.substring(0, 50))
println("Encoding : " + encodingStr) //Encoding : utf-16be
val bytes = xml.getBytes(encodingStr)

val vtdGen = new VTDGen
vtdGen.setDoc(bytes)

vtdGen.parse(true)
print("***************************************************")
print("Parsing method is called and imposed")
val vn = vtdGen.getNav()
val pilot = new AutoPilot(vn)
pilot.selectXPath(xpath)

  println("Xpath :::"+xpath)
  //    println("pilot.selctXPath(xpath)  ::: "+pilot.selectXPath(xpath))
  println("pilot.evalXPathToString ::: "+pilot.evalXPathToString())

  if (xpath.contains("/@")) {
    println("if loop")
    value = pilot.evalXPathToString()
  } else {
    println("else loop : " + pilot.evalXPath())
    println("vn.getText ::"+ vn.getText)
    while (pilot.evalXPath != -1) {
      println("vn " + vn)
      if (vn.getText != -1) {
        value = vn.toNormalizedString(vn.getText)
      }
      value
    }
  }
}

1 个答案:

答案 0 :(得分:0)

字节顺序掩码的意思是2个16位字符序列,它告诉xml解析器后续文档的编码。

如果你的文件是utf-16BE编码的......前两个字符应该是0xfe 0xff。

否则,前两个字符应为0xff 0xfe ...

您可以打开十六进制查看器/编辑器以检查文档标题。