我正在使用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);
答案 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");