get、post请求乱码处理

202 阅读1分钟

文章目录



服务器获取客户端的信息交流以 请求报文、响应报文进行交流,所以服务器读请求报文、以及客户端读响应报文的编码尤为重要。

1. get请求乱码 - 参数数据值放在请求地址的后面

背景:根据标准,URL地址除了字母、数字外,其他任何字符都要经过编码才能发送给服务器。客户端编码、服务器解码类型不匹配,导致解码错乱


[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oxB6lLDY-1572858846861)(en-resource://database/7051:1)]


[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6NhWPuRU-1572858846882)(en-resource://database/7055:1)]



解决方法:显示设置客户端对URL地址的编码

  1. 客户端: 修改Server.XML配置文件:Tomcat目录 → conf → server.xml → 编码
  2. 服务端: HttpServletRequest.setCharacterEncoding(“UTF-8”) → 解码

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-H3Q1Ynzv-1572858846891)(en-resource://database/7053:1)]

2. Post请求乱码

背景:PrintWriter对象默认使用的字符集没有对应unicode编码的中文字符、需要将unicode编码 → utf-8编码


解决方法:更改Unicdoe编码为utf-8 - 添加下列三条语句

@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
           req.setCharacterEncoding("UTF-8");    // 可能会用到请求报文中的参数,设置服务器读请求报文的编码
           resp.setCharacterEncoding("UTF-8");    // PrintWriter 写入流 字符编码
           resp.setContentType("charset=UTF-8");      // 网页输出内容的显示编码
           super.service(req, resp);
     }