我默认安装了 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!
...
}
所以我不确定是否:
Tomcat 8.5.6 并不是真的到处都使用 UTF-8,我需要在某个地方的配置文件中手动设置它。
我的 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 应该是相关的
- 在您的 server.xml 中设置 URIEncoding="UTF-8"。引用资料:HTTP 连接器、AJP 连接器。
- 使用默认编码设置为 UTF-8 的字符编码过滤器
关于java - 如何在 Servlet 处理程序中使用 utf-8 作为请求参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40077637/