我通过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。
谢谢。
答案 0 :(得分:0)
我不会删除这个问题,万一有人遇到同样的麻烦。
问题是浏览器在执行时发送类似C:\fakepath\
的路径,在转换为XML后,它指出\f
。
您可以在浏览器中设置此行为。
问候。