代码之家  ›  专栏  ›  技术社区  ›  Laird Nelson

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

  •  0
  • Laird Nelson  · 技术社区  · 15 年前

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

    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>  Ð 
    

    为什么XMLEventReader会搞砸解析?为什么字符显示不正确?如果是这样的话,为什么XMLEventReader不合并字符和事件呢?为什么斯塔克斯如此令人难以置信的丑陋和难以捉摸?

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

    下面是一些示例XML,当然我只是从编辑器中复制了这些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事件作出反应来阅读本文的,将其内容保存到堆栈上的字符串中,然后对一个名为“question”的END\u元素事件作出反应。在收到question的END_元素事件后,我检索刚才提到的字符串的值,并构造一个Java对象,将刚才提到的字符串作为输入。

    当我系统输出打印()结果,我(有时)得到了我之前提到的假垃圾。

    当我包起来的时候系统输出在一个带有“UTF8”编码集的PrintWriter中,这样我就不会简单地根据平台的编码输出字符了,我得到了相同的结果。

    2 回复  |  直到 15 年前
        1
  •  2
  •   Laird Nelson    15 年前

    这是macosx的JVM上的一个bug。控制台使用的字符编码并不默认为UTF-8,即使默认字符编码的所有其他用法也是如此 UTF8。

        2
  •  0
  •   dty    15 年前