【问题标题】:Unicode(0xb) error while parsing an XML file using Stax使用 Stax 解析 XML 文件时出现 Unicode(0xb) 错误
【发布时间】:2012-12-20 22:58:16
【问题描述】:

在解析 XML 文件时,Stax 会产生错误:

Unicode(0xb) 错误 - 在文档的元素内容中发现无效的 XML 字符 (Unicode: 0xb)。

只需单击下面的链接,其中带有特殊字符“VI”的 xml 行。它不是字母字符:当您尝试将其复制并粘贴到记事本中时,您会得到它作为一些符号。我尝试使用 Stax 解析它。它显示了上述错误。

有人可以给我一个解决方案吗?

提前致谢。

【问题讨论】:

    标签: java xml parsing unicode


    【解决方案1】:

    每当无效的 xml 字符出现在 xml 中时,就会出现这样的错误。当您在记事本++ 中打开它时,它看起来像 VT、SOH、FF,这些都是无效的 xml 字符。我正在使用 xml 1.0 版,并且在通过模式将文本数据输入数据库之前验证文本数据

    Pattern p = Pattern.compile("[^\u0009\u000A\u000D\u0020-\uD7FF\uE000-\uFFFD\u10000-\u10FFF]+");
    retunContent = p.matcher(retunContent).replaceAll("");
    

    保证xml中不会输入无效的特殊字符

    【讨论】:

      【解决方案2】:

      0xB(垂直制​​表符)不是 XML 中的有效字符。 ASCII 32(0x20,空格)之前的唯一有效字符是 0x9(制表符)、0xA(回车)和 0xD(换行)。

      简而言之,您要解析的不是 XML。

      【讨论】:

      • 抱歉迟到了,感谢您的回复..问题是我无法控制 XML 文件的生成..它是从应用程序生成的,但是我必须从那里解析它..so试着给我一个合适的解决方案
      • “正确的解决方案”是去找编写/提供软件的人并让他们修复它。他们不生成 XML。他们正在生成一些包含大量“”的东西,看起来很像 XML,但不是。如果这不是一个选项,您可以在将数据提供给 XML 解析器之前过滤数据,但我强烈建议您尝试从源头解决问题。
      【解决方案3】:

      根据XML W3C Recommendation 0xb is not allowed in an XML file:

      字符范围 [2] 字符 ::= #x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF] /* 任何 Unicode 字符,不包括代理块、FFFE 和 FFFF。 */

      严格来说,您的输入文件不是 XML 文件。

      【讨论】:

      • 抱歉迟到了,感谢您的回复..问题是我无法控制 XML 文件的生成..它是从应用程序生成的,但是我必须从那里解析它..so请尝试给我一个适当的解决方案..
      • 您可以尝试在解析文件之前对其进行清理。
      猜你喜欢
      • 1970-01-01
      • 2011-08-24
      • 1970-01-01
      • 2016-01-13
      • 1970-01-01
      • 1970-01-01
      • 2017-08-16
      • 2014-03-31
      相关资源
      最近更新 更多