1

我对 java servlet 的 getParameter() 有一些问题,即使我在 server.xml 中正确设置了 Tomcat 的编码,它也不会解码参数。

 <Connector port.. URIEncoding="UTF-8"/>

如果我解码原始查询,我会得到解码后的查询,但 getParamter 不会自行解码!

 protected void service(HttpServletRequest request, HttpServletResponse response) 
                throws ServletException, IOException {
    System.out.println("CharacterEncoding: "+ request.getCharacterEncoding());
    System.out.println("Query String: "+ URLDecoder.decode(request.getQueryString(), "UTF-8");
    System.out.println("Query param name: "+request.getParameter("name"));
    ...

我得到的结果如下:

字符编码:UTF-8

查询字符串:name=日本语一番ぜソFOX_&'">•«Ç€Ö™»_αß_iİıI_Администратор_cœur d´Ouchy__عربي

查询参数名称:æ¥æ¬èªä¸çªãã½ï¼¦ï¼¯ï¼¸_&'">â¢Â«Ãâ¬Ãâ¢Â»_αÃ_iİıI_дминиÑÑÑÑаÑоÑ_cÅur d´Ouchy_ð ð ðª_عØØØØØ ±Ø¨Ù

您可以清楚地看到查询和名称的值不一样!在我的 jsp 页面中,我使用 <%@page contentType="text/html; charset=UTF-8" %>

4

1 回答 1

2

我了解这涉及 GET 请求。设置<Connector URIEncoding="UTF-8">应该这样做。它不起作用只能意味着您在 Eclipse 之类的 IDE 中运行 Tomcat,并且当您在/conf/server.xml.

目前还不清楚您使用的是哪个 IDE,但如果是 Eclipse,您需要编辑工作server.xml区的Servers项目中的文件,而不是 Tomcat 自己的/conf/server.xml文件

在此处输入图像描述

或者通过双击服务器视图中的 Tomcat 服务器条目并相应地更改服务器位置部分来配置 Eclipse 以控制 Tomcat 的安装。

在此处输入图像描述

回到您的调查/修复尝试:request.getCharacterEncoding()它没有用于解码 GET 查询字符串(因为这超出了 Servlet API 的控制范围),它仅用于解码 POST 请求正文。<%@page pageEncoding="UTF-8"%>只会设置响应和后续表单提交的字符编码。

也可以看看

于 2012-05-29T01:32:10.190 回答