J2EE请求响应乱码问题

乱码分类

J2EE请求响应乱码问题

1、请求乱码(浏览器发送给服务器的数据,服务器收到数据解析出来乱码。)

1.1 GET请求乱码
解决原理:
String un = request.getParameter("***"); un = new String(un.getBytes("ISO-8859-1"), "UTF-8");
原因:
1、所有的请求参数都是带在url地址上的;
2、tomcat收到这个请求就会调用默认的编解码格式(ISO-8859-1)将其解码完成,并封装成request对象。
注 : (Tomcat服务器默认的编码解码格式是ISO-8859-1)。
解决方案:
去改服务器的配置文件:server.xml,在8080端口配置处添加一句URIEncoding="uft-8"。

1.2 POST请求乱码
原因:
1、请求带来的数据都在请求体中放着,tomcat并不着急解析请求体,一旦调动 request.getParameter("***"),tomcat将整个请求体按照默认的编码格式(ISO-8859-1)全部解析完成。
解决方案:
在调用 request.getParameter("***"),之前加入request.setCharacterEncoding("uft-8") (告诉tomcat请求体数据使用utf-8解码)

2、响应乱码(服务器 发送给浏览器的数据,浏览器收到,解析乱码。)

原因:
直接写出去的数据,浏览器并不知道数据的内容类型以及编码格式等,浏览器用默认格式(utf-8/gbk/…)打开发生乱码。
解决方案:
给浏览器的数据说明数据格式:response.setContentType("text/html;charset=utf-8);