XML中的非法字符未被替换

时间:2016-03-08 21:50:25

标签: java xml jaxb

解决方案所以这根本不是xml问题。我的xml转义正确完成,但是存在编码问题。所以我想与大家分享我的解决方案,我希望你觉得这很有用。

public static String entityEncode(String text) throws UnsupportedEncodingException {
    String result = text;

    if (result == null) {
        return result;
    }
    byte ptext[] = result.getBytes("ISO-8859-1"); 
    String value = new String(ptext, "UTF-8"); 
    String temp = XMLStringUtil.escapeControlChrs(value);

    return temp;
}

EXPLANATION 上面的xml函数适用于XML 1.0。我们接受给定的文本,将其转换为字节,因为String没有相关的编码。之后我们在" UTF-8" 中的字节之外创建一个新字符串。这也是为什么java只是告诉我字符引用错误&#,它无法识别出错的字符。现在我完成了编码并将其分配给 UTF-8 ,没有问题,xml转义正常进行!

编辑:如何在提供的字符串中打印出所有非法的xml字符?根据{{​​1}}参数?我遇到的问题是我不想逃避一切,因为它之后没有正确解码。所以现在,我只需要找出文本中的无效字符是什么。造成问题并且需要编码的o ..

我有以下错误消息:

StringEscapeUtils.escapeXml

它没有具体告诉我角色是什么问题。

我将原始的XML解析转换为xml文档然后再转换为xml文档。我进一步消毒以删除非法字符

ERROR:  'Character reference "&#'
ERROR:  'com.sun.org.apache.xml.internal.utils.WrappedRuntimeException: Character reference "&#'

然而,它并没有将它们删除,因此我不确定如何解决这个问题。目前我有:

String xml10pattern = "[^"
    + "\u0009\r\n"
    + "\u0020-\uD7FF"
    + "\uE000-\uFFFD"
    + "\ud800\udc00-\udbff\udfff"
    + "]";

实体编码只使用标准的xml解析类来转义基于String temp = entityEncode(temp); String legal = temp.replaceAll(xml10pattern , ""); item.setResponseBody(legal); 的字符XMLStringUtil.escapeControlChrs并且只有其他转义,没有删除。但有些事情正在被遗漏。

0 个答案:

没有答案