使用XMLStreamReader转义字符

时间:2015-03-06 13:42:42

标签: java xml unicode stax

我正在使用XMLStreamReader来读取xml文件。

该文件包含以下格式的转义cahrecter:ü

在我看来,两个逃脱的字符应该代表字符“ü”(UTF-8编码?)

但xml Stream阅读器会创建以下字符串:ã¼

在创建阅读器时我做错了什么?

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);

1 个答案:

答案 0 :(得分:4)

  

在创建阅读器时我做错了什么?

不,错误是由首先创建文件的人做出的。字符引用表示一个Unicode代码点,因此如果要将ü表示为字符引用,则它应为üü。这里似乎发生的事情是,创建文件的人以某种方式混淆了他们的编码,并将U + 00FC的UTF-8编码中的每个字节视为单独的字符,并将每个字符序列化为字符引用。 / p>

如果您无法在源文件中更正文件,那么您必须自己进行事后修复。如果已经一致地应用了此文件中的错误编码,那么XMLStreamReader将为您提供一个包含char值的全部< = 255的Java字符串。由于Unicode字符0-255与ISO-8859-相同1,将此字符串编码为ISO-8859-1将为您提供由相同字节值组成的byte[],然后您可以 de 编码为UTF-8以获取正确的字符串:

String correctString = new String(mangledString.getBytes("ISO-8859-1"), "UTF-8");