首页 > 其他分享 >GET&POST请求和响应的中文乱码解决方案

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

时间:2024-01-26 22:23:41浏览次数:34  
标签:username UTF 请求 GET resp req 乱码 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>

标签:username,UTF,请求,GET,resp,req,乱码,POST
From: https://www.cnblogs.com/lisong0626/p/17990833

相关文章

  • getskiplimit 跳过指定条数的数据 ,常用于分页
    //云端代码'usestrict';constdb=uniCloud.database()exports.main=async(event,context)=>{constcollection=db.collection(event.name)constres=awaitcollection.where(event.data).limit(event.limit).get()returnres};//......
  • Apipost-cli、Jenkins持续集成配置
    安装Apipost-clinpminstall-gapipost-cli运行脚本安装好Apipost-cli后,在命令行输入生成的命令,即可执行测试用例,运行完成后会展示测试进度并生成测试报告。Jenkins配置Apipostcli基于Nodejs运行需要在jenkins上配置NodeJs依赖Step1:在插件管理中安装NodeJs在全局工具中配置Nod......
  • 2024年1月Java项目开发指南14:关于post中的body和param以及java中的@RequestBody和@Req
    在HTTP请求中,POST方法通常用于向服务器发送数据,这些数据可以在请求的body中,也可以在URL的param中。不过,这两者的使用方式和适用场景是不同的。Body:在POST请求中,body主要用于包含要发送到服务器的数据。这些数据通常是表单数据、JSON数据或其他类型的数据。当你需要在请求体中发送......
  • 根据后端接口获取文件流下载Excel文件 分别通过GET和POST请求实现(★★★
    POST携带参数请求文件流并保存为Excel文件//payload携带的对象参数functiondownloadExcel(payload){letxhr=newXMLHttpRequest();xhr.open('POST','background/baseInfo/export',true);xhr.setRequestHeader('Content-Type','application/j......
  • Apipost-cli、Jenkins持续集成配置
    安装Apipost-clnpminstall-gapipost-cli运行脚本安装好Apipost-cli后,在命令行输入生成的命令,即可执行测试用例,运行完成后会展示测试进度并生成测试报告。Jenkins配置Apipostcli基于Nodejs运行需要在jenkins上配置NodeJs依赖Step1:在插件管理中安装NodeJs  在......
  • Go Get 从私有库(比如公司库)获取包
    gomodule从私有库获取包goget是读取goenv和git的相关配置来使用http(s)或者ssh来拉取源码.参考的这篇:GoGet访问私有库配置总结的是以下几点:goget时必须要与包名匹配,所以上传的包的名字还是要按固定的来;比如可以是firetech/zzk/hs256goget访问包会默认会走......
  • 字符串“getline”“fgets”“getchar”
    https://www.luogu.com.cn/problem/P8506?contestId=154692`include<bits/stdc++.h>usingnamespacestd;intmain(){intn;intcount=0;cin>>n;getchar();while(n--){chara[1000];fgets(a,sizeof(a),stdin);intflag=0;for(inti=0;a[i+1]!=......
  • @PostConstruct用法详解介绍
    1.@PostConstruct介绍定义:在方法上加该注解会在项目启动的时候执行该方法,也可以理解为在spring容器初始化的时候执行该方法。说明:被@PostConstruct修饰的方法会在服务器加载Servlet的时候运行,并且只会被服务器调用一次,类似于Serclet的inti()方法。被@PostConstruct修饰的方法......
  • PostgreSQL技术大讲堂 - 第43讲:流复制原理
       PostgreSQL从小白到专家,是从入门逐渐能力提升的一个系列教程,内容包括对PG基础的认知、包括安装使用、包括角色权限、包括维护管理、、等内容,希望对热爱PG、学习PG的同学们有帮助,欢迎持续关注CUUGPG技术大讲堂。 第43讲:流复制原理 PostgreSQL第43讲:1月27日(周六)1......
  • 在PyCharm中运行Python的unit测试时,出现‘file‘ object has no attribute ‘getvalue
    https://blog.csdn.net/m0_46900715/article/details/129725053  ......