【问题标题】:Error about invalid XML characters on Java关于 Java 上无效 XML 字符的错误
【发布时间】:2011-01-22 16:02:28
【问题描述】:

在 Java 上解析 xml 文件时出现错误:

An invalid XML character (Unicode: 0x0) was found in the element content of the document.

xml 来自网络服务。

问题是只有当webservice在localhost(windows+tomcat)上运行时我才会得到错误,而不是webservice在线时(linux+tomcat)。

如何替换无效字符? 谢谢。

【问题讨论】:

    标签: java xml parsing unicode


    【解决方案1】:

    这是一个编码问题。要么您将输入流读取为 UTF8,但它不是,或者相反。

    您应该在阅读内容时明确指定编码。例如。通过

    new InputStreamReader(getInputStream(), "UTF-8")
    

    另一个问题可能是tomcat。尝试在 server.xml 文件的 tomcat 连接器设置中添加 URIEncoding="UTF-8"。因为:

    事实证明,JSP 规范说如果没有明确声明 JSP 页面的页面编码,则应使用 ISO-8859-1 (!)。

    取自here

    【讨论】:

    【解决方案2】:

    环顾四周发现 0x0 是一个空字符,其他人在http://forums.sun.com/thread.jspa?threadID=579849 遇到了同样的 XML 和空字符问题。不确定您是如何解析 XML,但如果您首先将其作为字符串获取,则会在 http://forums.sun.com/thread.jspa?threadID=628189 处讨论如何替换 null。

    【讨论】:

    • -1 这些链接现在似乎已失效。这就是不鼓励仅提供链接答案的原因。
    【解决方案3】:

    Unicode 字符 0x0 代表 NULL 表示您要提取的数据在某处包含 NULL(这在 XML 中是不允许的,因此您的错误)。

    确保您首先找出导致 NULL 的原因。

    另外,您是如何与 WebService 交互的?如果您使用的是 Axis,请确保 WSDL 为数据输入和输出指定了一些编码。

    【讨论】:

    • +1 用于常识方法。盲目地修复这样的错误而不关心它来自哪里不是一个好主意。
    【解决方案4】:

    使用此代码修复:

    String cleanXMLString = null;
    Pattern pattern = null;
    Matcher matcher = null;
    pattern = Pattern.compile("[\\000]*");
    matcher = pattern.matcher(dirtyXMLString);
    if (matcher.find()) {
       cleanXMLString = matcher.replaceAll("");
    }
    

    【讨论】:

    • +1,但可以通过dirtyXMLString.replaceAll("[\\000]*", "") 简化。
    • 也可以通过将*更改为+dirtyXMLString.replaceAll("[\\000]+", "")
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-21
    • 2015-12-09
    • 2023-03-18
    • 2015-04-25
    • 1970-01-01
    相关资源
    最近更新 更多