我有使用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
}
}
}
答案 0 :(得分:0)
字节顺序掩码的意思是2个16位字符序列,它告诉xml解析器后续文档的编码。
如果你的文件是utf-16BE编码的......前两个字符应该是0xfe 0xff。
否则,前两个字符应为0xff 0xfe ...
您可以打开十六进制查看器/编辑器以检查文档标题。