【问题标题】:com.ctc.wstx.exc.WstxUnexpectedCharException: Illegal character ((CTRL-CHAR, code 15))com.ctc.wstx.exc.WstxUnexpectedCharException:非法字符((CTRL-CHAR,代码 15))
【发布时间】:2012-09-14 11:58:53
【问题描述】:

我正在使用公理从 XML 中提取数据。
但由于 XML 中有 CTRL-CHAR(例如:â、€、¢、“、”、™、'、- 等),我遇到了上述错误。
任何人都可以帮我替换所有 CTRL-SHAR 以避免上述错误。

【问题讨论】:

  • CTLR-CHAR 不是指您列出的那些字符,而是指 U+0020 以下的不可打印控制字符(除了少数例外,特别是 CR、LF 和制表符) XML 1.0 文档中不允许。如果您的源文档包含此类字符,则它们不是格式良好的 XML。
  • @Ian :是的,但例外情况说它们是 CTRL-CHAR 不是吗?当我一个接一个地替换检测到的字符时,它工作正常。但我需要一个方便且强大的方法。
  • 异常显示“代码 15”,即 U+000F。

标签: java xml-parsing axiom


【解决方案1】:

目前我在这种情况下使用以下方法。但我认为一定有比这更好的方法。

public static String removeNonUtf8CompliantCharacters( final String inString ) {
        if (null == inString ) return null;
        byte[] byteArr = inString.getBytes();
        for ( int i=0; i < byteArr.length; i++ ) {
            byte ch= byteArr[i]; 
            // remove any characters outside the valid UTF-8 range as well as all control characters
            if ( !(ch < 0x00FD && ch > 0x001F) || ch =='&' || ch=='#') {
                byteArr[i]=' ';
            }
        }
        return new String( byteArr );
    }

【讨论】:

    猜你喜欢
    • 2012-08-17
    • 2020-12-15
    • 2011-06-18
    • 1970-01-01
    • 2019-04-28
    • 1970-01-01
    • 2015-10-10
    • 1970-01-01
    相关资源
    最近更新 更多