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

世上唯一不能复制的是时间,唯一不能重演的是人生,唯一不劳而获的是年龄。该怎么走,过什么样的生活,全凭自己的选择和努力。人生很贵,请别浪费!与智者为伍,与良善者同行。GET&POST请求和响应的中文乱码解决方案,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

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>

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/227733.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!