使用 XMLStreamReader 转义字符
Escaped Characters with XMLStreamReader
我正在使用 XMLStreamReader 读取 xml 文件。
该文件包含以下形式的转义字符:ü
。
在我看来,两个转义字符应该代表字符“ü”(UTF-8 编码?)
但是 xml 流 reader 创建以下字符串: ã¼
我是不是在创建 reader 的过程中出错了?
Reader inputReader = Files.newBufferedReader(this.xmlFile.toPath(), StandardCharsets.UTF_8);
XMLInputFactory fact = XMLInputFactory.newInstance();
fact.setProperty("javax.xml.stream.isCoalescing", true);
XMLStreamReader parser = fact.createXMLStreamReader(inputReader);
Did I make something wrong during the creation of the reader?
不对,首先创建文件的人犯了这个错误。字符引用代表一个 Unicode 代码点,因此如果您想将 ü 表示为字符引用,它应该是 ü
或 ü
。这里似乎发生的事情是,创建该文件的人以某种方式混淆了他们的编码,并将 U+00FC 的 UTF-8 编码中的每个字节视为一个单独的字符,并将这些字符中的每一个序列化为字符引用。
如果您无法在源代码中更正文件,那么您将不得不自己修复它 post-hoc。如果此文件中的错误编码一直被应用,那么 XMLStreamReader 将为您提供一个 Java 字符串,其中包含 char
值,这些值均 <= 255。由于 Unicode 字符 0-255 与 ISO 相同-8859-1,将此字符串编码为 ISO-8859-1 将为您提供一个由相同字节值组成的 byte[]
,然后您可以将其 de 编码为 UTF-8获取正确的字符串:
String correctString = new String(mangledString.getBytes("ISO-8859-1"), "UTF-8");
我正在使用 XMLStreamReader 读取 xml 文件。
该文件包含以下形式的转义字符:ü
。
在我看来,两个转义字符应该代表字符“ü”(UTF-8 编码?)
但是 xml 流 reader 创建以下字符串: ã¼
我是不是在创建 reader 的过程中出错了?
Reader inputReader = Files.newBufferedReader(this.xmlFile.toPath(), StandardCharsets.UTF_8);
XMLInputFactory fact = XMLInputFactory.newInstance();
fact.setProperty("javax.xml.stream.isCoalescing", true);
XMLStreamReader parser = fact.createXMLStreamReader(inputReader);
Did I make something wrong during the creation of the reader?
不对,首先创建文件的人犯了这个错误。字符引用代表一个 Unicode 代码点,因此如果您想将 ü 表示为字符引用,它应该是 ü
或 ü
。这里似乎发生的事情是,创建该文件的人以某种方式混淆了他们的编码,并将 U+00FC 的 UTF-8 编码中的每个字节视为一个单独的字符,并将这些字符中的每一个序列化为字符引用。
如果您无法在源代码中更正文件,那么您将不得不自己修复它 post-hoc。如果此文件中的错误编码一直被应用,那么 XMLStreamReader 将为您提供一个 Java 字符串,其中包含 char
值,这些值均 <= 255。由于 Unicode 字符 0-255 与 ISO 相同-8859-1,将此字符串编码为 ISO-8859-1 将为您提供一个由相同字节值组成的 byte[]
,然后您可以将其 de 编码为 UTF-8获取正确的字符串:
String correctString = new String(mangledString.getBytes("ISO-8859-1"), "UTF-8");