jax*_*axb 15 java xml web-services character-encoding
我从webservices获得以下exceptopn:
com.ctc.wstx.exc.WstxUnexpectedCharException:非法字符((CTRL-CHAR,代码15))
我知道这背后的原因,我想要返回的数据中有"控制字符".并且在xml中不允许使用CTRL-CHAR.
我搜索了解决方案,很多地方我找到了要删除的代码CTRL-CHAR
.
如果我从数据中删除控制字符,我最终会担心数据丢失吗?我想清洁解决方案可能编码.而不是删除控制字符.
sse*_*ano 11
我会做OrangeDog建议的.但是如果你想在你的代码中解决它,请尝试:
replaceAll("[\\x00-\\x09\\x11\\x12\\x14-\\x1F\\x7F]", "")
\\x12
是char.
问候.
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);
}
Run Code Online (Sandbox Code Playgroud)
除了有趣的评论之外,Woodstox还在JDK解析器之上执行了一些额外的验证,并拒绝将ASCII字符15
视为无效.
至于为什么那个角色在那里,我们不能告诉你,它在你的数据中.同样,我们无法告诉你删除该字符是否会破坏任何内容,因为再次,这是你的数据.你只能为自己建立.
谢谢你的投入.我分享解决方案可能对其他人有帮助.要求不是消除CONTROL CHAR,它应该保持在DB中,并且一个WS通过n/w客户端发送它应该能够获得CONTROL CHAR.所以我实现了如下代码:
共享示例代码和输出.
示例代码:
System.out.println("NewSfn");
System.out.println(URLEncoder.encode("NewSfn", "UTF-8"));
System.out.println(URLDecoder.decode("NewSfn", "UTF-8"));
Run Code Online (Sandbox Code Playgroud)
输出:
NewSfn
New%0FSfn
NewSfn
Run Code Online (Sandbox Code Playgroud)
所以客户将收到CONTROL CHAR.
编辑:Stack Exchange未显示上面的CONTROL CHAR.NewSfn
是这样的New(CONTROL CHAR)Sfn
.
归档时间: |
|
查看次数: |
52308 次 |
最近记录: |