使用Control Characters在JAVA问题中解析JSON

时间:2011-06-21 09:26:22

标签: json rest java-ee apache-wink

我通过HTTP收到JSON请愿书。来自Internet Explorer 8解析失败时出现异常:

InPart inPart = mp.next();

MyClass myClass = inPart.getBody(MyClass.class, null);

com.ctc.wstx.exc.WstxUnexpectedCharException: Illegal character ((CTRL-CHAR, code 12))    at [row,col {unknown-source}]: [1,101]]

相关代码:

InPart inPart = mp.next();

String s = inPart.getBody(String.class, null);

providers.getMessageBodyReader(MyClass.class, null, null,
            MediaType.APPLICATION_JSON_TYPE).readFrom(MyClass.class, null, null,
            MediaType.APPLICATION_JSON_TYPE, headers.getRequestHeaders(),
                new ByteArrayInputStream(s.getBytes())); // Tried with s.getBytes("UTF-8")

com.ctc.wstx.exc.WstxUnexpectedCharException: Illegal character ((CTRL-CHAR, code 12)) at [row,col {unknown-source}]: [1,101]

此外,如果我这样做:

String ss = s.replaceAll("\\p{Cntrl}", "");

ss.equals(s); // 

输出真实的

长度相同。

我也尝试过:

private String removeControlChar(String in) {
    StringBuilder sb = new StringBuilder();
    for (char c : in.toCharArray())
    {
        if(!Character.isISOControl(c)) {
            sb.append(c);
        }
        else
        {
            // To delete
            int i = 0;
        }
    }
    return sb.toString();
}

InPart inPart = mp.next();

String s = inPart.getBody(String.class, null);
Strign ss = removeControlChar(s);
providers.getMessageBodyReader(MyClass.class, null, null,
            MediaType.APPLICATION_JSON_TYPE).readFrom(MyClass.class, null, null,
            MediaType.APPLICATION_JSON_TYPE, headers.getRequestHeaders(),
                new ByteArrayInputStream(ss.getBytes())); // Tried with s.getBytes("UTF-8")

如果我调试,失败的字符是\f,如异常中所述。但错误表明它是一个无效的XML字符。这可能是问题吗?

任何想法?这似乎只会影响Internet Explorer。

谢谢。

1 个答案:

答案 0 :(得分:0)

我不会删除这个问题,万一有人遇到同样的麻烦。

问题是浏览器在执行时发送类似C:\fakepath\的路径,在转换为XML后,它指出\f

您可以在浏览器中设置此行为。

问候。