解析特殊字符时出现IllegalDataException

时间:2012-06-20 16:20:12

标签: xml encoding jdom

我的网络应用程序中有一个输入框,如果我键入以下输入:

charʃƪ

在服务器端,当我尝试使用Jdom构建一个xml文档时,崩溃会引发以下异常:

org.jdom.IllegalDataException:数据“char(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调用 ...的&安培; MESSAGE =炭20%(3%1AA

我在服务器端

pRequest.getParameter( “MESSAGE”); 它回报我:“ char(3A

有什么想法吗?

3 个答案:

答案 0 :(得分:1)

现在正在运作。

我从jQuery插件URLEncode切换到本机javascript函数:

encodeURIComponent()

此外我发现在ajax调用中你可以指定contentType

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

答案 1 :(得分: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 char也是'Restricted'(我不是100%肯定这意味着什么,我正在调查)。
  • 您确定想要使用“替换”字符(0x1a)

无论上述情况如何,我怀疑您在输入框和JDOM setAttribute(...)调用之间的代码中存在问题。这些地方之间有什么东西可以改变字符编码,序列化或以其他方式改变输入值吗?我怀疑在调用JDOM之前还有其他一些问题正在改变数据,因为你不太可能真的试图将char 0x1a加载为XML字符。

答案 2 :(得分:0)

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

如果我们做一点点Unicode和编码侦探工作,我们可以得到一个可能发生的事情的提示。

假设您正在尝试输入这些字符:

  • ʃ,Unicode U + 0283(拉丁文小写字母esh)
  • ƪ,Unicode U + 01AA(拉丁字母反转esh循环)

我们可以看到浏览器编码源于这两个字符的unicode代码点:

  • (,ascii字符集中恰好是28
  • 3,其余3
  • %1A,1A不是合法的URL字符,因此它被编码
  • A,剩下的A

你使用的是一些ajax javascript库吗?也许是时候换了?