servlet 解决中文乱码

1 get请求request乱码

在Tomcat7及以下版本,客户端以UTF-8的编码传输数据到服务器端,而服务器端的request对象使用的是ISO8859-1这个字符编码来接收数据,服务器和客户端沟通的编码不一致因此才会产生中文乱码的。
解决办法:在接收到数据后,先获取request对象以ISo8859-1字符编码接收到的原始数据的字节数组,然后通过字节数组以指定的编码构建字符串,解决乱码问题。
Tomcat8的版本中get方式不会出现乱码了,因为服务器对url的编码格式可以进行自动转换。

tomcat8以下版本解决get中文乱码

String username = req.getParameter("username");
username = new String(username.getBytes("iso8859-1"), "utf-8");

2 post请求request乱码

在获取参数前设置setCharacterEncoding为utf-8

req.setCharacterEncoding("UTF-8");
String username = req.getParameter("username");

3 response乱码

方式一:

resp.setCharacterEncoding("utf-8");    //设置 HttpServletResponse使用utf-8编码
resp.setHeader("Content-Type", "text/html;charset=utf-8");    //通知浏览器使用utf-8解码

方式二(优先使用):

resp.setContentType("text/html;charset=utf-8");
PrintWriter writer = resp.getWriter();
riter.println("注册成功");

4 使用例子

package com.zjw;


import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;

@WebServlet("/rs")
public class RegisterServlet extends HttpsServlet{

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String username = req.getParameter("username");
        //tomcat8及以上版本不要使用转码,否则会乱码
//        username = new String(username.getBytes("iso8859-1"), "utf-8");
        String password = req.getParameter("password");
        System.out.println(username + " " + password);

        PrintWriter writer = resp.getWriter();
        writer.println("注册成功");
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //解决post中request中文乱码
        req.setCharacterEncoding("UTF-8");
        String username = req.getParameter("username");
        String password = req.getParameter("password");
        System.out.println(username + " " + password);

        //响应给客户端
        //解决response中文乱码
        resp.setContentType("text/html;charset=utf-8");
        PrintWriter writer = resp.getWriter();
        writer.println("注册成功");
    }
}
posted @ 2020-10-28 16:32  雨中遐想  阅读(263)  评论(0编辑  收藏  举报