Servlet请求和响应中文乱码解决方式

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u012219371/article/details/85212947

请求

get请求

Tomcat 8.0 开始,默认的URIEncodingISO-8859-1变为UTF-8,如下图所示:
在这里插入图片描述

URIEncoding只影响get方式请求时URI的编码,不影响请求体和响应体的编码。默认请求体和响应体的编码还为iso-8859-1

假如从客户端以get方式传来一个username参数。

Tomcat Version < 8.0 的处理方式:

String username=new String(request.getParameter("username").getBytes("iso-8859-1"),"utf-8");

Tomcat Version >= 8.0 的处理方式:

String username=request.getParameter("username");

post请求

post方式请求体的默认编码为iso-8859-1

request.setCharacterEncoding("utf-8");//设置请求体的编码为utf-8
String username=request.getParameter("username");

响应

字节流

String类的getBytes方法,默认编码方式为utf-8

response.setHeader("Content-Type","text/html;charset=utf-8");//设置一个响应头,让客户端以utf-8编码方式读取
response.getOutputStream().write("琴瑟琵琶".getBytes("utf-8"));//这里的uft-8也可以不填

#上面两句等同于
response.setContentType("text/html;charset=utf-8");
response.getOutputStream().write("琴瑟琵琶".getBytes());

字符流

以字符流的形式响应时,默认响应体的编码方式为iso-8859-1

response.setCharacterEncoding("utf-8");//设置响应体的编码
response.setHeader("Content-Type","text/html;charset=utf-8");//设置一个响应头,让客户端以utf-8编码方式读取
response.getWriter().write("魑魅魍魉");

# 上面三句等同于
response.setContentType("text/html;charset=utf-8");
response.getWriter().write("魑魅魍魉");

猜你喜欢

转载自blog.csdn.net/u012219371/article/details/85212947