【问题标题】:Not able to parse a string that contains utf8 0xc2 0x85 characters using jdom parser无法使用 jdom 解析器解析包含 utf8 0xc2 0x85 字符的字符串
【发布时间】:2013-05-10 05:20:24
【问题描述】:

我有一个包含 0xc2 0x85 个字符的 utf-8 字符串。 Eclipse 将其视为空白。某些应用程序将其视为“...”。

由于字符串是 xml,我使用的是 jdom 解析器,但 jdom 解析器失败并给出以下异常。

org.jdom.input.JDOMParseException:第 1 行错误:prolog 中不允许内容。 在 org.jdom.input.SAXBuilder.build(SAXBuilder.java:381) 在 org.jdom.input.SAXBuilder.build(SAXBuilder.java:764)

知道为什么 jdom 解析器不将其视为空格吗?我还能做些什么来让解析器成功验证 xml? xml 字符串中的所有其他元素似乎都很好。

【问题讨论】:

  • 0xc2 0x85 是 Unicode 字符 U+0085(下一行)的 utf-8。 fileformat.info/info/unicode/char/85/index.htm
  • U+85 在 XML 中有效,是“下一行”(NEL) 控制代码,用作空格。但是,它很少使用并且在其他格式中无效,例如 HTML。包含它是为了与旧的 IBM 格式兼容。我不建议使用它。它也很容易与省略号的 CP-1252 字符混淆,其原始值为 0x85,但在 Unicode 中应表示为 U+2026。某些软件(例如浏览器)可能会遇到它,假设它的 CP-1252 编码不正确并且(错误地)显示省略号。

标签: jdom


【解决方案1】:

空白在 XML 中具有非常特殊的含义。在 XML 中的根元素之外,您可以使用的唯一字符是 (#x20 | #x9 | #xD | #xA)+(空格、回车、换行符和制表符)。

XML 中的 prolog 区域允许包含limited structures 和空格。

您显示的字符在根元素之外的有效 XML 中是不允许的。对不起。

【讨论】:

    【解决方案2】:

    JDOM(实际上是 SAX 解析器)解析该字符没有任何问题。你得到的异常总是由 xml prolog 之前的非法字符引起的:

    <?xml version="1.0" encoding="UTF-8"?>
    

    可能在此之前您有“隐形”字符,但它们仍然存在。

    【讨论】:

    • 这些字符在 xml 序言之前不存在。但是,它位于 xml prolog 和根元素之间。我不确定这些字符是否应该成为序言或内容的一部分。看起来 jdom 将这些字符视为序言的一部分。根据 xml 规范,什么是正确的?
    • 序言是根元素之前的所有内容...w3.org/TR/2004/REC-xml11-20040204/#NT-document不是 JDOM 是“困难的”,而是它(与任何支持库一起)确保您拥有有效的 XML
    • 是的,我应该说“在 xml 序言之前或之中”。
    猜你喜欢
    • 1970-01-01
    • 2020-04-28
    • 1970-01-01
    • 1970-01-01
    • 2012-05-04
    • 1970-01-01
    • 2010-10-25
    • 2019-07-15
    • 2012-11-09
    相关资源
    最近更新 更多