[英]Java handle special characters request parameters
我在Flex-Java(Client-Server)应用程序上工作,却遇到了问题。 or . 我发送到服务器路径参数并在JSP上接收它们,有时,这些参数具有特殊字符,如或 。 我有一个普遍的问题,我的服务器上收到的那些特殊字符错误。
我还检查出有喜欢同样isuue另一个问题, 这一个或这其他 。
我已经尝试使用request.setCharacterEncoding("UTF-8")
来接收参数(第一个问题的答案)。
我还尝试在server.xml文件中检查服务器(Apache Tomcat 7.0.34.0)的配置,并确保端口8080的节点具有URIEncoding="UTF-8"
属性(第二个问题的答案)。
我什至尝试阅读以下参数:
String paramTest1 = (new String(request.getParameter("paramTest").getBytes("ISO-8859-1"),"UTF-8"));
或String paramTest2 = (new String(request.getParameter("paramTest").getBytes("UTF-8")));
调试我的应用程序时,我意识到URI可以被很好地接受,问题出在我从请求中读取参数的那一刻。
目前,我通过传统方式接收参数,即我的JSP代码:
<%@page contentType="text/html" pageEncoding="UTF-8" language = "java"%>
<%
request.setCharacterEncoding("UTF-8");
String paramTest = request.getParameter("paramTest");
String paramTest1 = (new String(request.getParameter("paramTest").getBytes("ISO-8859-1"),"UTF-8"));
String paramTest2 = (new String(request.getParameter("paramTest").getBytes("UTF-8")));
%>
如图像中所示,我为paramTest参数发送了字符串“1234acentoáéíóúeñe”。 我的var获取参数的值是:
paramTest = 1234acento�����
paramTest1 = 1234acento?????
paramTest2 = 1234acento�����
而且我需要接收与Im发送的字符完全相同的字符。
不知道说什么重要,但是在Flex方面,对于URLRequest对象Im为requestHeaders Araray指定了URLRequestHeader对象("Content-Type", "text/html;charset=UTF-8")
。 这对我来说没有帮助。
任何意见或答案是很好的赞赏。
谢谢。
也许这是一种过时的技术,但对于仍在as4(flex)上编写代码的人可能有用。
我意识到只有当我从flex发送的请求是一个文件请求(用于上传文件)时,才能对特殊字符进行很好的编码,如果这些字符是与普通请求一起发送的(POST参数请求),则该request.setCharacterEncoding("UTF-8");
足以正确编码和读取参数。
因此,当请求为fileRequest时,必须将参数作为FileReference的URLRequest参数上的URI参数发送,这就是为什么参数在URI上看起来不错但无法在服务器上读取的原因。
好吧好吧,讨论太多了,因此,用于在客户端对加引号的字符进行编码的代码是:
public static function encodeQuotes(s:String):String {
return s.replace("á", "%C3%A1").replace("é", "%C3%A9").replace("í", "%C3%AD").replace("ó", "%C3%B3").replace("ú", "%C3%BA").replace("ñ", "%C3%B1").
replace("Á", "%C3%81").replace("É", "%C3%89").replace("Í", "%C3%8D").replace("Ó", "%C3%93").replace("Ú", "%C3%9A").replace("Ñ", "%C3%91");
}
然后,您可以使用相同的request.setCharacterEncoding("UTF-8");
在服务器端读取参数request.setCharacterEncoding("UTF-8");
。
还将utf-8
编码(而不是iso-8859 getBytes ()
使用getBytes ()
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.