GET&POST请求和响应的中文乱码解决方案

Serlvet程序的请求和响应乱码问题

get请求与post请求数据乱码

public class RequestAPIServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // 获取请求参数
        String username = req.getParameter("username");
        //解决get请求的中文乱码
        //1 先以 iso8859-1 进行编码
        //2 再以 utf-8 进行解码
        //username = new String(username.getBytes(StandardCharsets.ISO_8859_1), 					StandardCharsets.UTF_8);
        System.out.println(username);
        var pwd = req.getParameter("pwd");
        System.out.println(pwd);
        System.out.println("请求方式:" + req.getMethod());
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //设置请求体的字符集为UTF-8,解决POST请求中文乱码
        //字符集设置要在获取请求参数前
        req.setCharacterEncoding("UTF-8");
        var username = req.getParameter("username");
        /*byte[] bytes = username.getBytes("ISO-8857-1");
        var data = new String(bytes, StandardCharsets.UTF_8);
        System.out.println(data);*/
        System.out.println(username);
        var pwd = req.getParameter("pwd");
        System.out.println(pwd);
        System.out.println("请求方式:" + req.getMethod());
    }
}

服务器响应客户端数据乱码问题

public class MyHttpServletResponse extends HttpServlet {
    //获取字符流响应数据
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //解决响应数据中文乱码
        //设置浏览器与服务器都使用utf-8字符集,并设置了响应头
        //此方法要在获取流对象之前使用
        resp.setContentType("text/html;charset=UTF-8");
        //获取字符流对象
        var writer = resp.getWriter();
        //服务端向客户端响应数据
	writer.write("Hello,Browser,我是服务端!");
    }
}

说明:解决中文乱码必须放到获取流之前

推荐使用
// 它会同时设置服务器和客户端都使用 UTF-8 字符集,还设置了响应头
// 此方法一定要在获取流对象之前调用才有效
resp.setContentType("text/html;charset=UTF-8");
不推荐使用
// 设置服务器字符集为 UTF-8
resp.setCharacterEncoding("UTF-8");
// 通过响应头,设置浏览器也使用 UTF-8 字符集
resp.setHeader("Content-Type", "text/html; charset=UTF-8");

SpringMVC请求和响应的乱码问题

如果使用的是Tomcat服务器,可以在server.xml配置字符集解决get请求的乱码
image

post请求乱码可以在web.xml配置字符编码过滤器

<!--配置字符编码过滤器-->
<filter>
	<filter-name>CharacterEncodingFilter</filter-name>
	<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
	<!--设置请求参数字符集初始化-->
	<init-param>
		<param-name>encoding</param-name>
		<param-value>UTF-8</param-value>
	</init-param>
	<!--设置请求与响应字符集编码初始化-->
	<init-param>
		<param-name>forceEncoding</param-name>
		<param-value>true</param-value>
	</init-param>
	</filter>
	<filter-mapping>
	<filter-name>CharacterEncodingFilter</filter-name>
	<url-pattern>/*</url-pattern>
</filter-mapping>
posted @ 2024-01-26 22:16  Evan1024  阅读(169)  评论(0编辑  收藏  举报