如何在Servlet处理程序中使用utf-8来获取请求参数?

时间:2016-10-17 02:23:29

标签: java tomcat servlets character-encoding

我有Tomcat 8.5.6的默认安装。似乎UTF-8编码的请求没有被正确解释,即使文档说默认(如果不是严格模式)这些天应该是UTF-8。我的java POST请求看起来像:

HttpPost post = new HttpPost(url);
post.setEntity(new UrlEncodedFormEntity(nameValuePairs, HTTP.UTF_8));
...

测试,我看到在我的servlet处理程序中没有正确解码波形符号:

public class MyServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, ...) {
        String tildeTest = request.getParam("foo"); // no good.
    }
}

如果我在访问之前在请求上明确设置了编码,则会正确解码:

protected void doPost(HttpServletRequest request, ...) {
    request.setCharacterEncoding("UTF-8");
    String tildeTest = request.getParam("foo"); // works!
    ...
}

所以我不确定是否:

  1. Tomcat 8.5.6到处都没有真正使用UTF-8,我需要在配置文件中手动设置它。

  2. 我的http请求缺少一些告诉Tomcat使用哪种编码的标头 - 也许http帖子默认为Tomcat刚刚尊重的其他编码。

  3. 有谁知道哪一个?

    由于

1 个答案:

答案 0 :(得分:0)

https://wiki.apache.org/tomcat/FAQ/CharacterEncoding

  

POST请求应指定参数和值的编码   他们发送。由于许多客户端无法设置显式编码,因此   使用默认值(ISO-8859-1)。

<强> What can you recommend to just make everything work? (How to use UTF-8 everywhere).

列出了6种方法来确保这一点,因为servlet请求1,2应该是相关的

  1. 设置URIEncoding =&#34; UTF-8&#34;在您的server.xml中。参考:HTTP连接器,AJP连接器。
  2. 使用字符编码过滤器,默认编码设置为UTF-8