请求
get请求
从Tomcat 8.0
开始,默认的URIEncoding
从ISO-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("魑魅魍魉");