【问题标题】:Escaped Characters with XMLStreamReader使用 XMLStreamReader 转义字符
【发布时间】:2015-05-08 03:11:54
【问题描述】:

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

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

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

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

我在创建阅读器的过程中是不是做错了什么?

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

【问题讨论】:

    标签: java xml unicode stax


    【解决方案1】:

    我在创建阅读器的过程中是不是做错了什么?

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

    如果您无法在源代码中更正文件,那么您必须自己进行事后修复。如果一直应用此文件中的错误编码,则 XMLStreamReader 将为您提供一个 Java 字符串,其中包含所有 char 值。由于 Unicode 字符 0-255 与 ISO-8859-1 相同,因此编码此字符串为 ISO-8859-1 将为您提供包含相同字节值的 byte[],然后您可以将其de编码为 UTF-8 以获得正确的字符串:

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

    【讨论】:

      猜你喜欢
      • 2022-01-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-30
      相关资源
      最近更新 更多