gpt4 book ai didi

java - 为什么 XMLEventReader 报告包含标记的 CHARACTERS 事件?

转载 作者:行者123 更新时间:2023-12-02 08:29:54 27 4
gpt4 key购买 nike

我有一个 XMLEventReader。它是使用“UTF8”编码从 XMLInputFactory 构建的。我用它来读取“encoding”属性设置为“UTF-8”的 XML 文件。

我已验证 XML 文件在 Firefox 下可以正确查看。当你查看页面编码时,它说它是UTF-8。

我已将 XMLEventReader 设置为合并字符事件,如下所示:

reader.setProperty(XMLEventReader.IS_COALESCING, Boolean.TRUE);

XML 文档没有 DTD。这是有效的。

XMLEventReader 有时会报告已收到 CHARACTERS 事件,其内容为(减去引号),例如:

r problems were most severe and frequent.) Did you sleep a lot more than usual nearly every night during that period?</text>  Ð 

请注意示例末尾附近的标记标签以及大写的 thorn。另请注意,该句子已被删除;据推测,在此事件之前还有另一个 CHARACTERS 事件,其中包含句子的前导部分。

为什么 XMLEventReader 会搞砸解析?为什么字符显示不正确?如果确实发生了这种情况,为什么 XMLEventReader 不合并 CHARACTERS 事件?为什么 StAX 如此丑陋且难以预测?

我正在 Mac 上使用 Java 运行时 (Java 6) 提供的 XMLEventReader。

这里有一些示例 XML,当然,我只是从编辑器中复制了它,所以谁知道结果会发生什么字符转换,但无论如何:

<question id="BMHPD17">
<permittedResponseCount>1</permittedResponseCount>
<text>It’s hard for me to stay out of trouble. (Would you say this is true or false for you?)</text>
<namedAnswerSet idref="TrueFalse"></namedAnswerSet>
</question>

请注意第 3 行的“智能撇号”。

我通过对 CHARACTERS 事件使用react来阅读此内容,将其内容保存到堆栈上的字符串中,然后对名称为“question”的 END_ELEMENT 事件使用react。收到问题的 END_ELEMENT 事件后,我检索刚才提到的字符串的值,并构造一个将我刚才提到的字符串作为输入的 Java 对象。

当我使用 System.out.println() 结果时,我(有时)会得到我之前提到的虚假垃圾。

当我将 System.out 包装在带有“UTF8”编码集的 PrintWriter 中时,这样我就不是简单地根据平台的编码输出字符,我得到了相同的结果。

最佳答案

事实证明这是 Mac OSX JVM 上的一个错误。控制台使用的字符编码并不默认为 UTF-8,尽管默认字符编码的所有其他用法都是 UTF8。

关于java - 为什么 XMLEventReader 报告包含标记的 CHARACTERS 事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3680043/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com