我遇到了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"));
...
我得到的结果如下:
CharacterEncoding:UTF-8
查询字符串:name =日本语一番ぜソFOX_&amp;'“&gt;•«Ç€Ö™»_αß_iİıI_Администратор_cœurd'Ouchy__عربي
查询参数名称:æ¥æ¬èªä¸çªãã½ï¼|OX_&amp;'“&gt;••••••I I dÂ'Ouchy_ðdðª_عرOU
你可以清楚地看到查询和名称的值不一样! 在我的jsp页面中,我正在使用&lt;%@ page contentType =“text / html; charset = UTF-8”%&gt;
答案 0 :(得分:2)
我知道这涉及GET请求。设置<Connector URIEncoding="UTF-8">
应该这样做。它不起作用只能意味着您从像Eclipse这样的IDE内部运行Tomcat,并且在/conf/server.xml
编辑Tomcat自己的配置时,IDE尚未配置为接管Tomcat自己的配置。
目前还不清楚你正在使用哪个IDE,但如果它是Eclipse,你需要 编辑工作区的服务器中的server.xml
文件相反,而不是Tomcat自己的/conf/server.xml
文件
或通过双击 Servers 视图中的Tomcat服务器条目并相应地更改服务器位置部分,将Eclipse配置为控制Tomcat的安装。
回到您的调查/修复尝试:request.getCharacterEncoding()
未被用于解码GET查询字符串(因为它超出了Servlet API的控制范围),它仅用于解码POST请求主体。 <%@page pageEncoding="UTF-8"%>
只会设置响应的字符编码,后续表单会提交。