【问题标题】:XML Marshalling - Converting from XML text in a file to an Object using Xstream in UTF-8XML Marshalling - 使用 UTF-8 中的 Xstream 从文件中的 XML 文本转换为对象
【发布时间】:2014-03-17 05:54:59
【问题描述】:

我正在尝试指示 Xstream 将 XML 转换为 Object,但只能以 UTF-8 读取它。这就是我试图实现这一目标的方式:

FileInputStream inStream = new FileInputStream((String) original);
InputStreamReader reader = new InputStreamReader(inStream, Charset.forName("UTF-8"));

xstream.fromXML(reader, myObject);

上面做了编组,但由于某种原因,下面的文字:

Lorem Ipsum &#xA7

总是转换为:

Lorem Ipsum §

我不希望它进行任何转换,所以我希望文本保持为Lorem Ipsum &#xA7。我在这里做错了吗?

【问题讨论】:

    标签: java xml utf-8 character-encoding xml-serialization


    【解决方案1】:

    不幸的是,几乎所有 XML 解析器都会自动解析字符引用,因此字符串 (§) 中的字符引用被解析为真正的底层 Unicode 字符。

    我查看了 XPP3、Oracle Java DOM Parser、Stax Parser 和 SAX Parser 的底层实现。它们都自动解析字符引用,没有禁用它的选项(您可以让 SAX 解析器不解析属性中的字符引用,但不能解析元素文本中的字符引用,并且只能通过一些讨厌的技巧)

    所以,除了编写自己的 XML Parser 之外,您可能只有两个选择:

    1) 让解析器/XStream 解析字符,然后“重新编码”对象中的任何特殊字符

    2) 在解析 XML 流之前对其进行预处理并转义 & 字符(即,如果您将其替换为 § 那么它将正常工作)。

    【讨论】:

      猜你喜欢
      • 2011-09-14
      • 2013-10-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-03
      • 2010-10-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多