一. HttpServletResponse响应乱码处理

1. 新建一个ResponseLuanMa的Web工程

2. 使用meta设置网页编码为GB2312

2.1. 新建一个GWMetaGB2312.java类, 使用字符流响应客户端

2.2. 编写GWMetaGB2312.java

package com.lywgames.myservlet;import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;public class GWMetaGB2312 extends HttpServlet {private static final long serialVersionUID = 1L;@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {StringBuilder sb = new StringBuilder();sb.append("<!DOCTYPE html>").append("\r\n");sb.append("<html>").append("\r\n");sb.append("<head>").append("\r\n");// 设置网页编码为GB2312sb.append("<meta charset='GB2312' />").append("\r\n");sb.append("<title>HttpServletResponse 字符流相应中文乱码</title>").append("\r\n");sb.append("</head>").append("\r\n");sb.append("<body>").append("\r\n");sb.append("<h1>HttpServletResponse 字符流相应中文乱码</h1>").append("\r\n");sb.append("</body>").append("\r\n");sb.append("</html>");// 字符流响应客户端resp.getWriter().println(sb.toString());}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doGet(req, resp);}
}

2.3. 编写web.xml

2.4. 部署运行, 网页的中文显示乱码

2.5. 查看网页编码是GB2312, 就是我们在meta中设置的编码

3. 使用meta设置网页编码为UTF-8

3.1. 新建一个GWMetaUTF8.java类, 使用字符流响应客户端

3.2. 编写GWMetaUTF8.java类

package com.lywgames.myservlet;import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;public class GWMetaUTF8 extends HttpServlet {private static final long serialVersionUID = 1L;@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {StringBuilder sb = new StringBuilder();sb.append("<!DOCTYPE html>").append("\r\n");sb.append("<html>").append("\r\n");sb.append("<head>").append("\r\n");// 设置网页编码为UTF-8sb.append("<meta charset='UTF-8' />").append("\r\n");sb.append("<title>HttpServletResponse 字符流相应中文乱码</title>").append("\r\n");sb.append("</head>").append("\r\n");sb.append("<body>").append("\r\n");sb.append("<h1>HttpServletResponse 字符流相应中文乱码</h1>").append("\r\n");sb.append("</body>").append("\r\n");sb.append("</html>");// 字符流响应客户端resp.getWriter().println(sb.toString());}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doGet(req, resp);}
}

3.3. 编写web.xml

3.4. 部署运行, 网页的中文显示乱码

3.5. 查看网页编码是UTF-8, 就是我们在meta中设置的编码

4. 使用HttpServletResponse的setCharacterEncoding设置字符编码GB2312

4.1. 新建一个GWSetCharacterEncodingGB2312.java类, 使用字符流响应客户端

4.2. 编写GWSetCharacterEncodingGB2312.java类

package com.lywgames.myservlet;import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;public class GWSetCharacterEncodingGB2312 extends HttpServlet {private static final long serialVersionUID = 1L;@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {StringBuilder sb = new StringBuilder();sb.append("<!DOCTYPE html>").append("\r\n");sb.append("<html>").append("\r\n");sb.append("<head>").append("\r\n");sb.append("<title>HttpServletResponse 字符流相应中文乱码</title>").append("\r\n");sb.append("</head>").append("\r\n");sb.append("<body>").append("\r\n");sb.append("<h1>HttpServletResponse 字符流相应中文乱码</h1>").append("\r\n");sb.append("</body>").append("\r\n");sb.append("</html>");// 响应给客户端的字符编码GB2312resp.setCharacterEncoding("GB2312");// 字符流响应客户端resp.getWriter().println(sb.toString());}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doGet(req, resp);}
}

4.3. 编写web.xml

4.4. 部署运行, 网页的中文显示正常

4.5. 查看网页编码是GB2312, 但是我们并没有设置网页编码

5. 使用HttpServletResponse的setCharacterEncoding设置字符编码UTF-8

5.1. 新建一个GWSetCharacterEncodingUTF8.java类, 使用字符流响应客户端

5.2. 编写GWSetCharacterEncodingUTF8.java类

package com.lywgames.myservlet;import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;public class GWSetCharacterEncodingUTF8 extends HttpServlet {private static final long serialVersionUID = 1L;@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {StringBuilder sb = new StringBuilder();sb.append("<!DOCTYPE html>").append("\r\n");sb.append("<html>").append("\r\n");sb.append("<head>").append("\r\n");sb.append("<title>HttpServletResponse 字符流相应中文乱码</title>").append("\r\n");sb.append("</head>").append("\r\n");sb.append("<body>").append("\r\n");sb.append("<h1>HttpServletResponse 字符流相应中文乱码</h1>").append("\r\n");sb.append("</body>").append("\r\n");sb.append("</html>");// 响应给客户端的字符编码UTF-8resp.setCharacterEncoding("UTF-8");// 字符流响应客户端resp.getWriter().println(sb.toString());}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doGet(req, resp);}
}

5.3. 编写web.xml

5.4. 部署运行, 网页的中文显示乱码

5.5. 查看网页编码是GB2312, 但是我们并没有设置网页编码

5.6. 这是我们在浏览器中手动设置编码为UTF-8, 网页的中文显示正常

5.7. 或者, 我们在meta中设置网页编码为UTF-8

5.8. 我们在meta中设置网页编码为UTF-8, 重新访问, 网页中文显示正常, 网页编码显示为UTF-8, 其中我们并没有手动在浏览器中设置网页编码。

5.9. 从上面的例子中我们大概知道, 要想响应的中文数据在浏览器中显示正常, 需要设置网页编码和字符编码统一为GB2312或者UTF-8, 推荐使用UTF-8。

6.使用HttpServletResponse的setHeader("Content-Type", "text/html; charset=GB2312"), 响应客户端的内容类型是text/html 编码是GB2312(包含字符编码和网页编码)。

6.1. 新建一个GWSetHeaderGB2312.java类, 使用字符流响应客户端

6.2. 编写GWSetHeaderGB2312.java类

package com.lywgames.myservlet;import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;public class GWSetHeaderGB2312 extends HttpServlet {private static final long serialVersionUID = 1L;@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {StringBuilder sb = new StringBuilder();sb.append("<!DOCTYPE html>").append("\r\n");sb.append("<html>").append("\r\n");sb.append("<head>").append("\r\n");sb.append("<title>HttpServletResponse 字符流相应中文乱码</title>").append("\r\n");sb.append("</head>").append("\r\n");sb.append("<body>").append("\r\n");sb.append("<h1>HttpServletResponse 字符流相应中文乱码</h1>").append("\r\n");sb.append("</body>").append("\r\n");sb.append("</html>");// 响应客户端的内容类型是text/html 编码是GB2312(包含字符编码和网页编码)resp.setHeader("Content-Type", "text/html; charset=GB2312");// 字符流响应客户端resp.getWriter().println(sb.toString());}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doGet(req, resp);}
}

6.3. 编写web.xml

6.4. 部署运行, 网页的中文显示正常

7. 使用HttpServletResponse的setHeader("Content-Type", "text/html; charset=UTF8"), 响应客户端的内容类型是text/html 编码是UTF8(包含字符编码和网页编码)。

7.1. 新建一个GWSetHeaderUTF8.java类, 使用字符流响应客户端

7.2. 编写GWSetHeaderUTF8.java类

package com.lywgames.myservlet;import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;public class GWSetHeaderUTF8 extends HttpServlet {private static final long serialVersionUID = 1L;@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {StringBuilder sb = new StringBuilder();sb.append("<!DOCTYPE html>").append("\r\n");sb.append("<html>").append("\r\n");sb.append("<head>").append("\r\n");sb.append("<title>HttpServletResponse 字符流相应中文乱码</title>").append("\r\n");sb.append("</head>").append("\r\n");sb.append("<body>").append("\r\n");sb.append("<h1>HttpServletResponse 字符流相应中文乱码</h1>").append("\r\n");sb.append("</body>").append("\r\n");sb.append("</html>");// 响应客户端的内容类型是text/html 编码是UTF-8(包含字符编码和网页编码)resp.setHeader("Content-Type", "text/html; charset=UTF-8");// 字符流响应客户端resp.getWriter().println(sb.toString());}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doGet(req, resp);}
}

7.3. 编写web.xml

7.4. 部署运行, 网页的中文显示正常

8. 用HttpServletResponse的setContentType("text/html;charset=GB2312")

, 响应客户端的内容类型是text/html 编码是GB2312(包含字符编码和网页编码)。推荐使用setContentType方法。

8.1. 新建一个GWSetContentTypeGB2312.java类, 使用字符流响应客户端

8.2. 编写GWSetContentTypeGB2312.java类

package com.lywgames.myservlet;import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;public class GWSetContentTypeGB2312 extends HttpServlet {private static final long serialVersionUID = 1L;@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {StringBuilder sb = new StringBuilder();sb.append("<!DOCTYPE html>").append("\r\n");sb.append("<html>").append("\r\n");sb.append("<head>").append("\r\n");// 网页编码GB2312sb.append("<meta charset='GB2312' />").append("\r\n");sb.append("<title>HttpServletResponse 字符流相应中文乱码</title>").append("\r\n");sb.append("</head>").append("\r\n");sb.append("<body>").append("\r\n");sb.append("<h1>HttpServletResponse 字符流相应中文乱码</h1>").append("\r\n");sb.append("</body>").append("\r\n");sb.append("</html>");// 响应客户端的内容类型是text/html 编码是GB2312(包含字符编码和网页编码)resp.setContentType("text/html;charset=GB2312");// 字符流响应客户端resp.getWriter().println(sb.toString());}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doGet(req, resp);}
}

8.3. 编写web.xml

8.4. 部署运行, 网页的中文显示正常

9. 用HttpServletResponse的setContentType("text/html;charset=UTF8"), 响应客户端的内容类型是text/html 编码是UTF8(包含字符编码和网页编码)。

9.1. 新建一个GWSetContentTypeUTF8.java类, 使用字符流响应客户端

9.2. 编写GWSetContentTypeUTF8.java类

package com.lywgames.myservlet;import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;public class GWSetContentTypeUTF8 extends HttpServlet {private static final long serialVersionUID = 1L;@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {StringBuilder sb = new StringBuilder();sb.append("<!DOCTYPE html>").append("\r\n");sb.append("<html>").append("\r\n");sb.append("<head>").append("\r\n");// 网页编码UTF-8sb.append("<meta charset='UTF-8' />").append("\r\n");sb.append("<title>HttpServletResponse 字符流相应中文乱码</title>").append("\r\n");sb.append("</head>").append("\r\n");sb.append("<body>").append("\r\n");sb.append("<h1>HttpServletResponse 字符流相应中文乱码</h1>").append("\r\n");sb.append("</body>").append("\r\n");sb.append("</html>");// 响应客户端的内容类型是text/html 编码是UTF-8(包含字符编码和网页编码)resp.setContentType("text/html;charset=UTF-8");// 字符流响应客户端resp.getWriter().println(sb.toString());}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doGet(req, resp);}
}

9.3. 编写web.xml

9.4. 部署运行, 网页的中文显示正常

10. 使用字节流响应数据, 字节流默认字符编码是UTF-8

10.1. 新建类GetOutputStreamLuanMa.java

10.2. 编写GetOutputStreamLuanMa.java

package com.lywgames.myservlet;import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;public class GetOutputStreamLuanMa extends HttpServlet {private static final long serialVersionUID = 1L;@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {StringBuilder sb = new StringBuilder();sb.append("<!DOCTYPE html>").append("\r\n");sb.append("<html>").append("\r\n");sb.append("<head>").append("\r\n");sb.append("<meta charset='UTF-8' />").append("\r\n");sb.append("<title>HttpServletResponse 字节流相应中文乱码</title>").append("\r\n");sb.append("</head>").append("\r\n");sb.append("<body>").append("\r\n");sb.append("<h1>HttpServletResponse 字节流相应中文乱码</h1>").append("\r\n");sb.append("</body>").append("\r\n");sb.append("</html>");// 字节流, 默认字符编码是UTF-8resp.getOutputStream().write(sb.toString().getBytes());}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doGet(req, resp);}
}

10.3. 编写web.xml

10.4. 部署运行

11. 不管是字节流还是字符流, 直接使用一行代码就可以解决响应乱码问题。

response.setContentType("text/html;charset=UTF-8");

注: 我们最好使用<meta charset='UTF-8' />设置网页编码, 都设置为UTF-8编码。

012_HttpServletResponse响应乱码相关推荐

  1. 填坑:req rsp请求响应乱码问题

    不多说,直接看代码 package com.itheima.servlet;import javax.servlet.ServletException; import javax.servlet.an ...

  2. 关于PHPExcel 导出下载表格,调试器响应乱码

    PHPExcel导出表格是日常程序开发很常见的一功能,有些小伙伴千辛万苦把代码写好之后,运行一下结果发现浏览器没反应,表格下载不了或者表格乱码!!!像这种情况有三种解决方法: 1.在header 之前 ...

  3. jmeter响应乱码的解决方法

    Jmeter在访问接口的时候,响应内容如果有中文可能会显示乱码,原因应该是响应页面没有做编码处理,jmeter默认按照ISO-8859-1编码格式进行解析. 下面把解决步骤列一下: jmeter的Re ...

  4. 解决response响应乱码

    最简单的方法在最下面! 所对应的xml里面的信息都是一样的! <?xml version="1.0" encoding="UTF-8"?> < ...

  5. swagger knife4j 解决接口下载文件响应乱码问题

    ** 在@ApiOperation注解中加上produces = "application/octet-stream" ** 添加效果如图所示: @ApiOperation(val ...

  6. fiddler 响应乱码打开自动解码设置

  7. 使用过滤器(Filter)解决请求参数中文乱码问题(复杂方式)

    前述: 在写这篇笔记之前,对笔记中的设计模式进行介绍: 本篇笔记中将要使用到的设计模式是:装饰(包装)设计模式 (1)装饰(包装)设计模式口诀: ①定义一个类,实现被装饰对象的接口 ②定义一个成员变量 ...

  8. Servlet--06--解决乱码问题; 请求转发; 重定向;

    乱码问题: 一.  请求-乱码问题:服务器获取的请求数据,在console显示时,出现了乱码. (1)post请求方式解决:req.serCharacterEncoding("utf-8&q ...

  9. 【SSM框架系列】SpringMVC的请求和响应

    request和response request对象的作用 获取请求参数 作为域对象存取数据 获取请求头 请求转发 response功能 回写数据,JSON格式字符串 页面跳转(请求重定向) Spri ...

最新文章

  1. javascript eval和JSON之间的联系
  2. 随着浏览器滚动,页面组件跟着滚动的效果
  3. 三十四、深入Java中的泛型(上篇)
  4. 解决升级 Office 2010 之后 Outlook 提示“无法打开 Microsoft Outlook”
  5. HDU 1217 Arbitrage (Floyd + SPFA判环)
  6. 防止网页被嵌入框架的代码
  7. StringBuffer和String,StringBuilder的区别?
  8. 小程序入门学习10--云开发03
  9. Cookie和Session专题
  10. springboot-cache缓存和J2cache二级缓存框架(带点漫画)
  11. mysql列名变更_如何在MySQL中更改列名
  12. 8g内存和16g内存区别 mac_8G和16GB内存,体验差异大吗?实测新版M1处理器苹果MacBook...
  13. 有道无术,术尚可求,有术无道,止于术
  14. css3背景颜色渐变属性(Gradients)
  15. Linux脏牛漏洞提权
  16. STM32使用正点原子无线烧录器无线查看数据波形
  17. 解决Windows10 系统中桌面窗口管理器运行时占用内存过大的问题
  18. Android掌上医疗预约挂号系统app
  19. 单片机程序烧录方式有几种?
  20. 题解:单词排序(水)

热门文章

  1. ARM1176JZF-S/S3C6410 内存地址转换
  2. 编译Android 4.0 ICS注意事项
  3. ip classles
  4. eleNuxt 打包到服务器上
  5. 国内外常用Linux服务器控制面板介绍
  6. MSTP技术支撑大客户专线——Vecloud
  7. CentOS系统设置开机自启动
  8. 计算机网络 浏览器发送http请求的过程分析
  9. 【JAVA】使用IntelliJ IDEA创建Java控制台工程
  10. gcc编译c程序,既然第一步把头文件包含进来了为什么还要进行第四步链接,链接的是什么?...