我正在开发 Flex-Java(客户端-服务器)应用程序,但遇到了一个问题。 我向服务器发送路径参数并在 JSP 上接收它们,有时,这些参数具有特殊字符,例如 áéíóú 或 ñ。 我有一个我认为是常见的问题,这些特殊字符在我的服务器上被错误接收。
我还检查了另一个具有相同问题的问题,例如 this one或this other .
我已经尝试使用 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")));
%>
如图所示,我发送字符串“1234acentoáéíóúeñe”作为 paramTest 参数。我的变量获取参数的值是:
paramTest = 1234acento�����
paramTest1 = 1234acento?????
paramTest2 = 1234acento�����
我需要接收与我发送的完全相同的字符。
不知道这是否重要,但在 Flex 方面,对于 URLRequest 对象,我为 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");
读取服务器端的参数了。
关于Java处理特殊字符请求参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17666914/