使用JCabi Java读取UTF-16 XML文件



我发现这个JCabi片段代码可以很好地与UTF-8 xml编码的文件配合使用,它基本上读取xml文件,然后将其打印为字符串。

XML xml;
try {
xml = new XMLDocument(new File("test8.xml"));
String xmlString = xml.toString();
System.out.println(xmlString);
} catch (FileNotFoundException e1) {
e1.printStackTrace();
}

然而,我需要它来在UTF-16编码的xml上运行相同的代码,它会给我以下错误:

〔致命错误〕:1:1:prolog中不允许有内容。线程中的异常";AWT-EventQueue-0";java.lang.IollegalArgumentException:无法解析,很可能XML是无效的

由:org.xml.ax.SAXParseException引起;行号:1;columnNumber:1;序言中不允许有内容。

我读到过这个错误,这意味着解析器没有识别序言,因为它看到了由于编码而不应该出现的字符。

我尝试过其他图书馆,它们提供了一种";告诉";编码源文件的类是在其中编码的,但我唯一能让它在某种程度上工作的库是JCabi,但我找不到一种方法来告诉它我的源文件是用UTF-16编码的。

谢谢,任何帮助都将不胜感激。

jcabiXMLDocument有各种构造函数,其中包括一个接受字符串的构造函数。因此,一种方法是使用:
Path path = Paths.get("test16_LE_with_bom.xml");
XML xml = new XMLDocument(Files.readString(path, StandardCharsets.UTF_16LE));
String xmlString = xml.toString();
System.out.println(xmlString);

这就利用了CCD_ 2和CCD_。

在我的第一次测试中,我的XML文件被编码为UTF-16-LE(开头有一个BOM:FF FE表示little-endian(。上述方法处理BOM OK。

我的测试文件的序言如下(没有明确的编码——也许这是一件坏事,在这里?(:

<?xml version="1.0"?>

在我的第二次测试中,我删除了BOM,并使用更新后的文件重新运行,这也起到了作用。

我使用Notepad++和十六进制编辑器来验证/选择编码&以编辑测试文件。

您的文件可能与我的测试文件不同(be与LE(。

最新更新