一、请求时的中文乱码问题
1、get方式:Tomcat 8+已经将get请求下的乱码问题解决了,但之前的版本也会出现乱码问题
分析: 当客户端发送get请求到服务器的时候,因为参数在url中,没有方法可以设置其编码,而在HTTP传输时将url进行ISO-8859-1编码,服务器收到数据后会以ISO-8859-1编码进行解码。又因为ISO-8859-1编码不支持中文,于是参数中带有中文的时候出现乱码问题。
解决方法:改变数据编码形式
/* 获取数据 */
username = request.getParameter("username");
/* 方法一 */
// 先对数据进行ISO-8859-1编码
username = URLEncoder.encode(username, :ISO-8859-1");
//再对数据进行UTF-8解码
username = URLDecoder.decode(username, "UTF-8");
/* 方法二 */
username = new String(username.getBytes("iso-8859-1"), "utf-8");
2、post方式:进行post请求显示乱码
当客户端发送post请求到服务器的时候,因为参数在请求体中,所以可以设置其编码,指定编码将乱码正确显示
解决方法:
/* 获取数据 */
username = request.getParameter("username");
/* 设置指定编码 */
request.setCharacterEncoding("utf-8");
二、响应时的中文乱码问题
因为通过请求后的数据编码格式为utf-8,如果没有对响应的编码格式进行对应操作,浏览器可能会进行错误的编码解码,所以出现乱码问题。
解决方法: 设置响应时浏览器的编码格式
response.setContentType("text/html;charset=utf-8");