1

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

我还检查了另一个具有相同问题的问题,例如this onethis 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")));
%>

如图所示,我可以为 paramTest 参数发送字符串“1234acentoáéíóúeñe”。我的变量获取参数的值是:

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

而且我需要接收与我发送的完全相同的字符。

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

任何评论或答案都非常感谢。

谢谢。

4

2 回答 2

1

也许这是太旧的技术,但对于仍在 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");

于 2014-12-01T20:58:54.820 回答
0

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

于 2013-07-16T02:23:03.030 回答