使用Unicode发布数据解析application / x-www-form-urlencoded时出错

时间:2014-03-31 16:02:36

标签: java post playframework playframework-2.0

当数据是unicode时,Play拒绝接受POST请求,我得到:

  

解析application / x-www-form-urlencoded

时出错

我觉得一切都很好,直到我用希伯来语而不是英语尝试了一个带有文本的请求,所以请求

value=hey

工作正常,但请求

value=%u05D4%u05D9%u05D9

失败。

我找到了something about it,但他说他通过改变play / api / mvc / ContentType.scala使其成功,这是我想避免的。

任何想法?
谢谢!


修改

我知道编码不符合application/x-www-form-urlencoded的标准,但我需要处理这种情况,目前无法更改客户端,它使用javascript escape方法。

我正在寻找后端方面的解决方案,这是Play解决方案 找到一个可以在java中实现的解决方案会很好,但是现在看起来解决方案是编写我自己的BodyParser(在scala中)。

1 个答案:

答案 0 :(得分:1)

根据我的研究,在application/x-www-form-urlencoded正文中处理Unicode的正确方法是将Unicode转换为文档默认字符集中的字节(即UTF-8),然后对字节进行URL编码(即% -encode)。

当然,就规范而言,您目前所做的事情(使用'%uxxxx'序列)不是有效的编码。 (你不能像那样把东西拉出空中......并希望它起作用。)

参考文献:


我注意到您通过浏览器的控制台发现了这种转义语法。以下是MSDN对Javascript escape()方法的说法:

  

“转义和unescape函数对于非ASCII字符无效,并且已弃用。在JavaScript 1.5及更高版本中,请使用encodeURI,decodeURI,encodeURIComponent和decodeURIComponent。”

我认为“无法正常工作”意味着他们使用浏览器无法识别的非标准转义语法。课程:阅读规范而不是依靠实验。