Request请求参数----中文乱码问题

简介: Request请求参数----中文乱码问题

一: GET  POST获取请求参数:

       在处理为什么会出现中文乱码的情况之前, 首先我们要直到GET  以及 POST两种获取请求参数的不同

1>POST

  POST获取请求参数是通过输入流getReader来进行获取的, 通过字符输入流来获取响应的请求参数, 并且在解码的时候, 默认的情况是      ISO_8859_1   的解码方式

2>GET

       GET获取请求参数的方式是通过getQueryString赖进行获取的, 并没有使用POST的流派方式


二: 乱码原因:

1>编码上:

浏览器在对请求参数进行编码的时候使用的是自定的UTF-8的形式, 首先对于中文字符, 比如张三进行编码, 在UTF-8下, 一个汉字占用了三个字节, 所以在这里就是6个字节

       转化方式通过以下两步进行实现

1.首先将字符串转化为二进制的方式


 2.之后在每两个16进制数之前加上%即可


2>解码上:

     

Tomcat默认使用的都是   ISO_8859_1  的解码方式


因为编码跟解码的方式不一样, 因此造成了在输入中文的时候出现乱码的情况


三: 解决方案

1>POST中文乱码解决方法:

       因为POST在接收参数使用的是Reader的方式, 并且此输入流的编码方式是可以进行相应的修改的, 所以我们在这边直接进行修改即可

//解决在接受参数的时候出现中文乱码的情况
        //1.重新设置post方式房中的Reader编码
        req.setCharacterEncoding("UTF-8");
        //2.获取数据
        String username = req.getParameter("username");
        System.out.println("修改之前"+username);
        //å¼ ä¸  接收之后发现出现了乱码的情况
        //其实是因为在Post方式当中的getReader中,使用的字符获取的编码并不是UTF-8的形式,所以我们需要对其进行修改
        //但是无法解决get的请求参数方法的乱码

 2>GET中文乱码解决方法:

   在前面我们已经分析过了GET跟POST获取请求参数的方式是不一样的, 而且GET解码在Tomcat当中是固定的, 无法进行修改, 所以我们不能通过使用POST的修改方式来解决GET中文乱码的方式


       但在分析过乱码出错的原因之后, 我们发现, 对于Tomcat已经给我们的 "乱码"  实际上 ,我们只要

1.先将乱码进行编译转化, 改为字节数组

2.再对于字节数组进行解码, 将其转化为字符即可


 //3.GET乱码无法使用这种设置其编码的原因, 因为GET在进行编码的时候使用的并不是Reader这种编码的方式, 同时的其系统内部设定其编码无法进行修改, 我们也就无法通过使用这种重新设置编码形式的方式了
        /*
        分析: 中文乱码的原因就是浏览器的编码, 跟Servlet的解码不一样, 我们可以对乱码之后的数据再将其转换成为一个字节,之后将其转化成为字符即可
         */
        //先将其转换成为一个字节的类型,之后再将字节转化成为字符即可
 
 
        byte[] bytes = username.getBytes(StandardCharsets.ISO_8859_1);
        String s = new String(bytes, "UTF-8");
        System.out.println("更改过后:"+s);


同样的, 这种不使用更改流派的默认编码, 而是对于乱码的修改的方式, 也适用于对于POST乱发情况的解决, 这也是一种通用的解决方案

相关文章
Kam
|
Java Maven
Feign调用把GET请求自动转成POST请求解决:Request method 'POST' not supported
Feign调用把GET请求自动转成POST请求解决:Request method 'POST' not supported
Kam
1969 0
|
4月前
|
编解码 Java
请求参数中文乱码-POST解决方法
请求参数中文乱码-POST解决方法
|
5月前
【SpringMVC】解决方案:获取请求参数乱码的问题 (POST方式请求参数乱码)
【SpringMVC】解决方案:获取请求参数乱码的问题 (POST方式请求参数乱码)
73 1
|
5月前
|
JSON 数据格式
这个错误信息表示在执行`requests.post(url, data=data, headers=head).json()`时出现了问题
这个错误信息表示在执行`requests.post(url, data=data, headers=head).json()`时出现了问题
61 2
request获取请求头的名称
request获取请求头的名称
|
5月前
|
应用服务中间件
Request请求参数中文乱码处理
Request请求参数中文乱码处理
140 0
|
JSON 前端开发 Java
SpringMVC 使用@ResponseBody返回json 中文乱码
SpringMVC 使用@ResponseBody返回json 中文乱码
237 0
SpringMVC 使用@ResponseBody返回json 中文乱码
请求参数中文乱码处理
请求参数中文乱码处理
91 0
请求参数中文乱码处理
|
应用服务中间件
请求参数的中文乱码的解决-HttpServletReques应用
请求参数的中文乱码的解决-HttpServletReques应用