Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 分析使用Unicode post数据编码的应用程序/x-www-form-URL时出错_Java_Post_Playframework_Playframework 2.0 - Fatal编程技术网

Java 分析使用Unicode post数据编码的应用程序/x-www-form-URL时出错

Java 分析使用Unicode post数据编码的应用程序/x-www-form-URL时出错,java,post,playframework,playframework-2.0,Java,Post,Playframework,Playframework 2.0,当数据为unicode且我得到以下信息时,Play拒绝接受POST请求: 分析应用程序/x-www-form-urlencoded时出错 我一直觉得一切都很顺利,直到我尝试了一个用希伯来语而不是英语写的请求 value=hey value=%u05D4%u05D9%u05D9 很好,但是有一个请求 value=hey value=%u05D4%u05D9%u05D9 失败了 我发现了,但他说他通过更改play/api/mvc/ContentType.scala使之生效,这是我想要避免的

当数据为unicode且我得到以下信息时,Play拒绝接受POST请求:

分析应用程序/x-www-form-urlencoded时出错

我一直觉得一切都很顺利,直到我尝试了一个用希伯来语而不是英语写的请求

value=hey
value=%u05D4%u05D9%u05D9
很好,但是有一个请求

value=hey
value=%u05D4%u05D9%u05D9
失败了

我发现了,但他说他通过更改play/api/mvc/ContentType.scala使之生效,这是我想要避免的

有什么想法吗?
谢谢


编辑 我知道编码不符合
application/x-www-form-urlencoded
的标准,但这就是我需要处理的情况,更改客户端当前不是一个选项,它使用javascript
escape
方法

我正在寻找一种后端解决方案,即Play解决方案。

找到一个可以用java实现的解决方案会很好,但目前看来解决方案是编写我自己的BodyParser(scala)。

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

当然,就规范而言,您当前所做的(使用“%uxxx”序列)不是一种有效的编码(您不能像那样把东西从空中拉出来……然后期望它能工作)

参考资料:

  • 维基百科:

  • HTML规范:。这给出了浏览器应该使用的算法。如果你做了/产生了类似的东西,你应该很好


我注意到您是通过浏览器控制台发现此转义语法的

escape和unescape函数对于非ASCII字符不能正常工作,已被弃用。在JavaScript 1.5及更高版本中,请使用encodeURI、decodeURI、encodeURIComponent和decodeURIComponent


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

我从未见过这种特殊的编码-您是否有参考资料建议它应该工作?我们使用的是一个旧系统,当播放代理时会发生这种特定错误它。它使用Flask,在这方面没有问题,Flask接受这种编码。我在转义后用希伯来语写的是“嘿:
escape”(“•יי”)
这并不能真正回答我的问题。支持它的一点并不意味着它是一种标准的处理方式……嗯,在将字符串发送到服务器之前转义字符串是一种常见的做法,因为除此之外没有其他文本操作,我认为它符合标准,不是吗?是的,转义是一种常见的做法-但我知道我以前从未见过
%u
表单或URL编码。这就是我要求提供参考的原因。建议通常最好使用UTF-8八位字节序列的正常
%xx
编码。是的,虽然
转义
已被弃用,不应使用,但我目前无法更改,因为它来自客户端和我无法更改它。因为我们使用的是不同的后端(flask)在游戏开始之前,它起到了作用,切换到游戏模式有点破坏了服务。我想要的是如何在游戏方面处理它,看起来我必须实现我自己的BodyParser@NitzanTomer-如果你必须生活在这些限制之内,你可能是对的。然而,它以前起作用的事实并不意味着这以前是正确的。发送未被标准识别的转义序列可以说是违反行为,即使它“起作用”.标准的要点是每个人/每件事都应该遵循它们。我完全同意,只是客户端目前不在我们手中..未来可能会改变,但现在它是第三方软件的和平,他们正在使用
escape
。因此,基本上我正在寻找一种解决方案,让我能够处理stu更好的是,我们将停止使用它们:)