IllegalDataException在解析特殊字符
我有一个输入框,在我的web应用程序,如果我键入以下内容输入:IllegalDataException在解析特殊字符
焦炭ʃƪ
在服务器端,当我尝试建立使用JDOM的XML文档它崩溃提高了以下异常:
org.jdom.IllegalDataException:数据“字符(3A”是不合法的JDOM属性:0X1A不是合法的XML字符
at org.jdom.Attribute.setValue(Attribute.java:491)
at org.jdom.Attribute.<init>(Attribute.java:228)
at org.jdom.Attribute.<init>(Attribute.java:251)
at org.jdom.Element.setAttribute(Element.java:1128)
这是浏览器如何编码的Ajax调用 ...... &消息=焦炭20%(3%1AA
在服务器端,当我做 pRequest.getParameter( “MESSAGE”) ; 它返回?我:“CHAR(3A”
任何想法是怎么回事有
它现在正在工作。
我从jQuery切换插件URLEncode的原生javascript函数:
encodeURIComponent()
而且我发现,在Ajax调用,您可以指定的contentType
contentType: "application/x-www-form-urlencoded; charset=UTF-8"
的XML 1.0规格不允许的字符0X1A使用......以往任何时候都不 Unicode字符
http://www.w3.org/TR/2008/PER-xml-20080205/#charsets
的XML 1.1规范不允许0X1A的性格,我看到:http://www.w3.org/TR/2004/REC-xml11-20040204/#NT-Char两
三件事,但:
- JDOM的1.x(和2.x)将拒绝非XML1.0字符。
- 即使在XML 1.1中,0x1a字符也是'Restricted'(我不是100%确定这意味着什么,我正在调查)。
- 你确定你要使用“换人”字符(0X1A)
是不管上面,我怀疑你在输入框和之间的代码有问题JDOM setAttribute(...)调用。这些地方之间是否有改变字符编码,序列化或以其他方式改变输入值的东西?我会怀疑在调用JDOM之前还有一些其他问题正在改变数据,因为你不太可能试图将char 0x1a作为XML字符加载。
正如@rolfl所怀疑的那样,浏览器中有些东西是非常需要的。你在用什么?
如果我们做一点Unicode和编码侦探工作,我们可以得知可能发生什么的提示。
假设你正在试图进入这些字符:
- ʃ,Unicode的U + 0283(小写拉丁字母ESH)
- ƪ,Unicode的U + 01AA(拉丁文字母颠倒ESH环)
我们可以看到浏览器编码从Unicode代码点所产生的这两个汉字:
- (,恰好是28的ASCII字符集
- 3,剩余的3
- %1A,1A是不是一个合法的URL字符所以它被编码
- A,剩余的甲
它是否使用了一些ajax javascript库?也许时间转换?