理解Tomcat中文乱码问题

理解Tomcat中文乱码问题

CSDN居然出了这么个功能,刚好发一篇博客尝尝鲜。
首先要理解请求和响应流程:

浏览器 tomcat引擎 后台 http请求 传递request和response对象 假设你设置的浏览 器编码为UTF-8 后台按照默认的ISO-8859-1获取数据,request.getParameter(String name) 后台处理完数据之后 默认按照ISO-8 859-1封装数据 当数据发送给浏 览器一样会乱码。 封装好的response. 将response数据抽取并封装成HTTP响应 浏览器 tomcat引擎 后台

对于响应response,后台在处理好数据之后,调用response.getWriter().println();将数据按照默认的编码ISO-8859-1写入缓冲区,经过tomcat引擎发送给客户端,此时在响应体中的内容已经是ISO-8859-1格式的编码,浏览器再按照自己电脑的默认编码(通常是GBK)解析返回数据,此时就会出现乱码。
对于请求request,后台同样会默认将数据以ISO-8859-1解析(尽管你设置的页面编码为UTF-8),如果不处理一样会乱码。但是对于POSTGET请求,处理方式是不一样的,原因在于POST请求将请求参数封装到请求体,是按照页面编码来封装的,而GET请求因为数据是显示在地址栏,因此浏览器会将中文参数经过ISO-8859-1编码封装到HTTP请求中,因此对于GET请求还需要多进行一次解码将ISO-8859-1编码解码一次。

//设置以UTF-8编码将数据写入到缓冲区。
response.setCharacterEncoding("UTF-8");
//是告诉浏览器以UTF-8编码解析。
response.setHeader("Content-Type", "text/html;charset=UTF-8");

//为了方便,所以将这两条代码封装为
response.setContentType("text/html;charset=UTF-8");


/*当浏览器将数据发送到服务器,如果是POST方式,
因为请求参数直接封装到请求体中,因此解析时敲如下代码以UTF-8解码*/
request.setCharacterEncoding("UTF-8");
/*而如果是GET方式,因为请求参数在地址栏,浏览器会按照默认编码ISO-8859-1编码在地址栏的参数,
因此后台需要先将参数以ISO-8859-1解码一次,再按照浏览器端页面的UTF-8设置再编码。即:*/
String name = request.getParameter("name");
name = new String(name.getBytes("ISO-8859-1", "UTF-8");

总结

请求OR响应 \ 请求方式 post get
request request.setCharacterEncoding(“UTF-8”); String name = new Stirng(name.getBytes(“ISO-8859-1”,“utf-8”);
response response.setContentType(“text/html;charset=UTF-8”); 方式同左边一样,不知道如何跨行…
发布了21 篇原创文章 · 获赞 2 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_34291570/article/details/87937905