2012-06-20 95 views
0

我有一个输入框,在我的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

任何想法是怎么回事有

回答

1

它现在正在工作。

我从jQuery切换插件URLEncode的原生javascript函数:

encodeURIComponent() 

而且我发现,在Ajax调用,您可以指定的contentType

contentType: "application/x-www-form-urlencoded; charset=UTF-8" 
0

的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字符加载。

0

正如@rolfl所怀疑的那样,浏览器中有些东西是非常需要的。你在用什么?

如果我们做一点Unicode和编码侦探工作,我们可以得知可能发生什么的提示。

假设你正在试图进入这些字符:

  • ʃ,Unicode的U + 0283(小写拉丁字母ESH)
  • ƪ,Unicode的U + 01AA(拉丁文字母颠倒ESH环)

我们可以看到浏览器编码从Unicode代码点所产生的这两个汉字:

  • (,恰好是28的ASCII字符集
  • 3,剩余的3
  • %1A,1A是不是一个合法的URL字符所以它被编码
  • A,剩余的甲

它是否使用了一些ajax javascript库?也许时间转换?