使用 JCabi Java 读取 UTF-16 XML 文件
Reading UTF-16 XML files with JCabi Java
我发现这个 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 它给了我以下错误:
[Fatal Error] :1:1: Content is not allowed in prolog.
Exception in thread "AWT-EventQueue-0" java.lang.IllegalArgumentException: Can't parse, most probably the XML is invalid
Caused by: org.xml.sax.SAXParseException; lineNumber: 1; columnNumber: 1; Content is not allowed in prolog.
我已阅读有关此错误的信息,这意味着解析器无法识别序言,因为它看到了因编码而不应存在的字符。
我已经尝试过其他库提供了一种方法来“告诉”class 源文件编码在哪个编码中,但我能够在某种程度上让它工作的唯一库是 JCabi , 但我无法找到一种方法来告诉它我的源文件是用 UTF-16 编码的。
谢谢,如有任何帮助,我们将不胜感激。
jcabi XMLDocument
有多种构造函数,包括一个接受字符串的构造函数。所以一种方法是使用:
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);
这利用了 java.nio.charset.StandardCharsets
和 java.nio.file.Files
。
在我的第一次测试中,我的 XML 文件被编码为 UTF-16-LE(并且开头有一个 BOM:FF FE
表示小端)。上述方法处理 BOM OK。
我的测试文件的序言如下(没有显式编码 - 也许这是一件坏事,在这里?):
<?xml version="1.0"?>
在我的第二次测试中,我删除了 BOM 并使用更新后的文件重新运行 - 这也有效。
我使用 Notepad++ 和十六进制编辑器来 verify/select 编码和编辑测试文件。
您的文件可能与我的测试文件不同(BE 与 LE)。
我发现这个 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 它给了我以下错误:
[Fatal Error] :1:1: Content is not allowed in prolog. Exception in thread "AWT-EventQueue-0" java.lang.IllegalArgumentException: Can't parse, most probably the XML is invalid
Caused by: org.xml.sax.SAXParseException; lineNumber: 1; columnNumber: 1; Content is not allowed in prolog.
我已阅读有关此错误的信息,这意味着解析器无法识别序言,因为它看到了因编码而不应存在的字符。
我已经尝试过其他库提供了一种方法来“告诉”class 源文件编码在哪个编码中,但我能够在某种程度上让它工作的唯一库是 JCabi , 但我无法找到一种方法来告诉它我的源文件是用 UTF-16 编码的。
谢谢,如有任何帮助,我们将不胜感激。
jcabi XMLDocument
有多种构造函数,包括一个接受字符串的构造函数。所以一种方法是使用:
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);
这利用了 java.nio.charset.StandardCharsets
和 java.nio.file.Files
。
在我的第一次测试中,我的 XML 文件被编码为 UTF-16-LE(并且开头有一个 BOM:FF FE
表示小端)。上述方法处理 BOM OK。
我的测试文件的序言如下(没有显式编码 - 也许这是一件坏事,在这里?):
<?xml version="1.0"?>
在我的第二次测试中,我删除了 BOM 并使用更新后的文件重新运行 - 这也有效。
我使用 Notepad++ 和十六进制编辑器来 verify/select 编码和编辑测试文件。
您的文件可能与我的测试文件不同(BE 与 LE)。