版权声明:本文为博主原创文章,如需转载请先联系作者后注明出处 https://blog.csdn.net/weixin_42158633/article/details/89554314
在已经在应用filter中指定了页面编码为UTF-8的情况下,通过GET方式发送的请求中的中文在控制台输出是�乱码,
而通过POST方式发送的中文识别正常。
原因是: Tomcat默认是按ISO-8859-1进行URL解码,ISO-8859-1并未包括中文字符,中文字符不能被正确解析了
如以下代码所示:
Servlet:
@WebServlet("/mylogin")
public class Myservlet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setCharacterEncoding("utf-8");
resp.setCharacterEncoding("utf-8");
resp.setContentType("text/html");
String name = req.getParameter("name");
System.out.println("req.get "+name);
System.out.println("中文");
resp.getWriter().println("<font color='red'>登录成功</font>");
}
}
jsp
Idea控制台输出:
req.get ����
����
解决方法: Tomcat8.5 解决方法
到tomcat/bin 目录下 编辑catalina.bat文件
找到 JAVA_OPTS 参数在加上 -Dfile.encoding=UTF-8
if not "%JSSE_OPTS%" == "" goto gotJsseOpts
set JSSE_OPTS="-Djdk.tls.ephemeralDHKeySize=2048"
:gotJsseOpts
set "JAVA_OPTS=%JAVA_OPTS% %JSSE_OPTS% -Dfile.encoding=UTF-8"
重启tomcat:解决!
Tomcat7.0 解决方法 (因为tomcat8 默认设置为URIEncoding="UTF-8")
tomcat7.0 在上述操作外,还需要在 tomcat/conf 目录下的server.xml 中添加 URIEncoding="UTF-8"
添加后:
重新启动tomcat, 成功!