非法字符 - CTRL-CHAR

2022-09-02 03:38:55

我从Web服务中得到以下异常:

com.ctc.wstx.exc.WstxUnexpectedCharException: Illegal character ((CTRL-CHAR, code 15))

我知道这背后的原因,我在想要返回的数据中得到了“控制字符”。在 XML 中是不允许的。CTRL-CHAR

我搜索了解决方案,并在许多地方找到了要删除的代码。CTRL-CHAR

需要注意的是,如果我从数据中删除控制字符,我最终会丢失数据吗?
我想要干净的解决方案可以编码,而不是删除控制字符。


答案 1

我会按照OrangeDog的建议去做。但是,如果您想在代码中解决它,请尝试:

replaceAll("[\\x00-\\x09\\x11\\x12\\x14-\\x1F\\x7F]", "")

\\x12是字符。


答案 2

此错误是由 Woodstox XML 解析器引发的。该类的源代码如下所示:InputBootstrapper

protected void reportUnexpectedChar(int i, String msg)
    throws WstxException
{
    char c = (char) i;
    String excMsg;

    // WTF? JDK thinks null char is just fine as?!
    if (Character.isISOControl(c)) {
        excMsg = "Unexpected character (CTRL-CHAR, code "+i+")"+msg;
    } else {
        excMsg = "Unexpected character '"+c+"' (code "+i+")"+msg;
    }
    Location loc = getLocation();
    throw new WstxUnexpectedCharException(excMsg, loc, c);
}

撇开有趣的评论不谈,Woodstox正在JDK解析器之上执行一些额外的验证,并拒绝ASCII字符为无效。15

至于为什么那个角色在那里,我们不能告诉你,它在你的数据中。同样,我们无法告诉您删除该字符是否会破坏任何内容,因为同样,这是您的数据。你只能为自己建立这一点。


推荐