由于计算机中的数据是以二进制形式存储的,因此,当传输中文的时候,就会发生字符和字节之间的转换。当响应的数据是正文的时候,会发生编解码不一致的问题,在浏览器生会出现乱码的问题。
以下是响应乱码的分析以及两种解决方案:
一、乱码的演示protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//获取响应的字符流
PrintWriter out = response.getWriter();
//向浏览器响应:我是努力的小白
out.print("我是努力的小白");
}
设置服务器的编码方式为GB2312,注意要在响应数据之前进行设置。
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//设置tomcat的编码方式为:GB2312
response.setCharacterEncoding("GB2312");
//获取响应的字符流
PrintWriter out = response.getWriter();
//向浏览器响应:我是努力的小白
out.print("我是努力的小白");
}
通过浏览器的F12的查看响应的数据,依然是乱码:
这种解决方案作为了解,可以帮助我们更好的理解乱码产生的原因。
三、第二种解决方案设置tomcat的编码为:UTF-8,浏览器的解码方式为:UTF-8
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//设置tomcat的编码方式为:UTF-8
response.setCharacterEncoding("UTF-8");
//设置浏览器的解码方式为:UTF-8
response.setHeader("Content-Type","text/html;charset=UTF-8");
//获取响应的字符流
PrintWriter out = response.getWriter();
//向浏览器响应:我是努力的小白
out.print("我是努力的小白");
}
通过浏览器的F12的查看响应的数据,不再是乱码:
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//设置tomcat的编码方式为:UTF-8
// response.setCharacterEncoding("UTF-8");
//设置浏览器的解码方式为:UTF-8
// response.setHeader("Content-Type","text/html;charset=UTF-8");
//相当于上述两行代码的简写
response.setContentType("text/html;charset=UTF-8");
//获取响应的字符流
PrintWriter out = response.getWriter();
//向浏览器响应:我是努力的小白
out.print("我是努力的小白");
}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) | 黑马程序员IT技术论坛 X3.2 |