java - 如何在 Servlet 处理程序中使用 utf-8 作为请求参数?

标签 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 请求缺少一些 header ,这些 header 告诉 Tomcat 使用哪种编码 - 可能 http post 默认为 Tomcat 正在接受的其他编码。

有人知道是哪一个吗?

谢谢

最佳答案

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

POST requests should specify the encoding of the parameters and values they send. Since many clients fail to set an explicit encoding, the default is used (ISO-8859-1).

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

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

  1. 在您的 server.xml 中设置 URIEncoding="UTF-8"。引用资料:HTTP 连接器、AJP 连接器。
  2. 使用默认编码设置为 UTF-8 的字符编码过滤器

关于java - 如何在 Servlet 处理程序中使用 utf-8 作为请求参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40077637/

相关文章:

tomcat - javax.net.ssl.SSLPeerUnverifiedException : peer not authenticated when load testing with JMeter

Tomcat jdbc realm security 和 jersey jax-rs

java - 在 Geronimo 中运行的 Java servlet 的简单例份验证

java - 您如何编写使用StdAudio在Java中弹奏和弦的方法?

java - RUNNABLE 线程在 native 方法中可能不消耗 CPU?

java - 有没有一种简单的方法可以将一个列表拆分为 X 个子列表?

java - 由于 "invalid Lifecycle transition was attempted "错误,无法在 Tomcat 7 上部署应用程序

java - request-filter-servlet-jsp 链中的响应

java - 使用 servlet 搜索数据库

java - 从 UDP 服务器发送文件时出现问题