请求参数中中文乱码

视频在day4 下午第二节课,55:27处

Post请求

在发送HTTP请求报文时,中文是UTF-8格式
HTTP请求报文到达服务器,被服务器解析,封装到Request对象中,此时取出中文,发现已经乱码了。说明了再解析的过程中出现了问题。
怎么解决?

  1. request.setCharacterEncoding("utf-8");

注意:

  1. 该方法可以重写请求体里面的编码格式
  2. 该方法必须要在读取请求参数之前调用

    Get请求

    没有乱码问题。

    响应中文乱码

    1. //response输出中文到客户端
    2. response.getWriter().println("你好");

    客户端显示 ???

    1. //设置响应报文为UTF-8
    2. response.setCharacterEncoding("utf-8");
    3. response.getWriter().println("你好");

    设置成utf-8之后,乱码由之前的???变成了娆㈣繋鎮�,说明了设置了之后使用的编码格式支持中文了
    设置了发送个客户端的响应报文的编码格式为utf-8,浏览器拿到之后解析乱码了,说明了浏览器使用的不是utf-8。乱码主要问题是服务器和浏览器没有沟通好使用哪个编码格式。
    怎么解决?
    服务器设置一个编码格式,将使用的编码格式告诉给客户端即可
    怎么告诉客户端?

  3. 通过响应头

  4. 通过响应体

设置响应头

  1. //response.setCharacterEncoding("utf-8");
  2. //设置Content-Type其实这个头有两个功能:
  3. //1.告诉给客户端使用的编码格式
  4. //2.服务器也会主动设置该编码格式,所以上面的setCharacterEncoding其实可以直接省略
  5. response.setHeader("Content-Type","text/html;charset=utf-8");
  6. response.getWriter().println("欢迎!");

设置响应体

  1. response.setCharacterEncoding("utf-8");
  2. response.getWriter().println("<!DOCTYPE html>\n" +
  3. "<html lang=\"en\">\n" +
  4. "<head>\n" +
  5. " <meta charset=\"UTF-8\">\n" +
  6. " <title>Title</title>\n" +
  7. "</head>\n" +
  8. "<body>");
  9. response.getWriter().println("欢迎您!!!");
  10. response.getWriter().println("</body>\n" +
  11. "</html>");