012_HttpServletResponse响应乱码
一. 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响应乱码相关推荐
- 填坑:req rsp请求响应乱码问题
不多说,直接看代码 package com.itheima.servlet;import javax.servlet.ServletException; import javax.servlet.an ...
- 关于PHPExcel 导出下载表格,调试器响应乱码
PHPExcel导出表格是日常程序开发很常见的一功能,有些小伙伴千辛万苦把代码写好之后,运行一下结果发现浏览器没反应,表格下载不了或者表格乱码!!!像这种情况有三种解决方法: 1.在header 之前 ...
- jmeter响应乱码的解决方法
Jmeter在访问接口的时候,响应内容如果有中文可能会显示乱码,原因应该是响应页面没有做编码处理,jmeter默认按照ISO-8859-1编码格式进行解析. 下面把解决步骤列一下: jmeter的Re ...
- 解决response响应乱码
最简单的方法在最下面! 所对应的xml里面的信息都是一样的! <?xml version="1.0" encoding="UTF-8"?> < ...
- swagger knife4j 解决接口下载文件响应乱码问题
** 在@ApiOperation注解中加上produces = "application/octet-stream" ** 添加效果如图所示: @ApiOperation(val ...
- fiddler 响应乱码打开自动解码设置
- 使用过滤器(Filter)解决请求参数中文乱码问题(复杂方式)
前述: 在写这篇笔记之前,对笔记中的设计模式进行介绍: 本篇笔记中将要使用到的设计模式是:装饰(包装)设计模式 (1)装饰(包装)设计模式口诀: ①定义一个类,实现被装饰对象的接口 ②定义一个成员变量 ...
- Servlet--06--解决乱码问题; 请求转发; 重定向;
乱码问题: 一. 请求-乱码问题:服务器获取的请求数据,在console显示时,出现了乱码. (1)post请求方式解决:req.serCharacterEncoding("utf-8&q ...
- 【SSM框架系列】SpringMVC的请求和响应
request和response request对象的作用 获取请求参数 作为域对象存取数据 获取请求头 请求转发 response功能 回写数据,JSON格式字符串 页面跳转(请求重定向) Spri ...
最新文章
- javascript eval和JSON之间的联系
- 随着浏览器滚动,页面组件跟着滚动的效果
- 三十四、深入Java中的泛型(上篇)
- 解决升级 Office 2010 之后 Outlook 提示“无法打开 Microsoft Outlook”
- HDU 1217 Arbitrage (Floyd + SPFA判环)
- 防止网页被嵌入框架的代码
- StringBuffer和String,StringBuilder的区别?
- 小程序入门学习10--云开发03
- Cookie和Session专题
- springboot-cache缓存和J2cache二级缓存框架(带点漫画)
- mysql列名变更_如何在MySQL中更改列名
- 8g内存和16g内存区别 mac_8G和16GB内存,体验差异大吗?实测新版M1处理器苹果MacBook...
- 有道无术,术尚可求,有术无道,止于术
- css3背景颜色渐变属性(Gradients)
- Linux脏牛漏洞提权
- STM32使用正点原子无线烧录器无线查看数据波形
- 解决Windows10 系统中桌面窗口管理器运行时占用内存过大的问题
- Android掌上医疗预约挂号系统app
- 单片机程序烧录方式有几种?
- 题解:单词排序(水)