Java处理特殊字符请求参数

标签 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" 属性(第二个问题的答案)。

我什至尝试读取参数,例如:

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")));
%>

如图所示,我发送字符串“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/

相关文章:

java - Jboss 7.1部署war web应用时如何配置jndi引用名workmanger和timer

css - MDC-Web CSS 主题颜色未定义

character-encoding - ZPL 打印 € 和带有锐角符号的字符

java - 转换后的 Word 文档(从 Windows-1252 到 UTF-8)无法正确显示字符

java - 为什么我不能让这些计算显示在 TextView 上?

java - 使用 LocationTextLocationStrategy 的 iText "Coordinate outside allowed range"异常

javascript - ExtJs:如何将记录传递给创建的元素?

javascript - session 存储安全

java - JPA 的 Servlet 字符编码问题

java - 线程 "main"java.lang.NoSuchMethodError : <method> 中的 JNI GetMethodID 异常