Java处理特殊字符请求参数

时间:2013-07-16 02:11:33

标签: java web character-encoding url-encoding url-parameters

我正在开发Flex-Java(客户端 - 服务器)应用程序,我遇到了问题。 我发送到服务器路径参数并在JSP上接收它们,有时,这些参数有特殊字符,如áéíóúñ。 我认为这是一个常见问题,我的服务器上收到了那些特殊字符。

我还检查了其他问题,例如this onethis other

我已经尝试使用request.setCharacterEncoding("UTF-8")来接收参数(第一个问题的答案)。

我还尝试在server.xml文件上检查我的服务器配置(Apache Tomcat 7.0.34.0),并确保端口8080的节点具有URIEncoding="UTF-8"属性(从第二个问题回答)。 / p>

我甚至尝试过读这个参数:

String paramTest1 = (new String(request.getParameter("paramTest").getBytes("ISO-8859-1"),"UTF-8")); 要么 String paramTest2 = (new String(request.getParameter("paramTest").getBytes("UTF-8")));

调试我的应用程序我意识到URI很受欢迎,问题是我从请求中读取参数的那一刻。

Request detail

目前我通过传统方式接收参数,我的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")));
%>

因为图像可以是apreciated我发送字符串“1234acentoáéíóúeñe”为paramTest参数。获得参数的我的变量值是:

paramTest = 1234acento�����
paramTest1 = 1234acento?????
paramTest2 = 1234acento�����

我需要收到与我发送完全相同的字符。

不知道在Flex方面说是否重要,对于URLRequest对象,我为requestHeaders Araray指定了一个URLRequestHeader对象("Content-Type", "text/html;charset=UTF-8")。这不符合我的目的。

任何评论或回答都表示赞赏。

感谢。

2 个答案:

答案 0 :(得分:1)

也许这是一项过于陈旧的技术,但对于那些仍在as4(flex)上编写代码的人来说可能是有用的。

我意识到只有当我从flex发送的请求是文件请求(用于上传文件)时,如果用普通请求发送的字符(POST参数请求)那么特殊字符才能很好地编码request.setCharacterEncoding("UTF-8");足以正确编码和读取参数。

因此,当请求是fileRequest时,参数必须作为URI参数发送到FileReference的URLRequest参数上,这就是为什么URI上的参数看起来不错但无法在服务器上读取。< / p>

好的,太多了,所以,在客户端编码引用字符的代码是:

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");读取服务器端的参数。

答案 1 :(得分:0)

getBytes ()也使用utf-8编码而不是iso-8859。

相关问题