012_HttpServletResponse响应乱码
一. HttpServletResponse響應(yīng)亂碼處理
1. 新建一個(gè)ResponseLuanMa的Web工程
2. 使用meta設(shè)置網(wǎng)頁(yè)編碼為GB2312
2.1. 新建一個(gè)GWMetaGB2312.java類, 使用字符流響應(yīng)客戶端
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");// 設(shè)置網(wǎng)頁(yè)編碼為GB2312sb.append("<meta charset='GB2312' />").append("\r\n");sb.append("<title>HttpServletResponse 字符流相應(yīng)中文亂碼</title>").append("\r\n");sb.append("</head>").append("\r\n");sb.append("<body>").append("\r\n");sb.append("<h1>HttpServletResponse 字符流相應(yīng)中文亂碼</h1>").append("\r\n");sb.append("</body>").append("\r\n");sb.append("</html>");// 字符流響應(yīng)客戶端resp.getWriter().println(sb.toString());}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doGet(req, resp);} }2.3. 編寫web.xml
2.4. 部署運(yùn)行, 網(wǎng)頁(yè)的中文顯示亂碼
2.5. 查看網(wǎng)頁(yè)編碼是GB2312, 就是我們?cè)趍eta中設(shè)置的編碼
3. 使用meta設(shè)置網(wǎng)頁(yè)編碼為UTF-8
3.1. 新建一個(gè)GWMetaUTF8.java類, 使用字符流響應(yīng)客戶端
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");// 設(shè)置網(wǎng)頁(yè)編碼為UTF-8sb.append("<meta charset='UTF-8' />").append("\r\n");sb.append("<title>HttpServletResponse 字符流相應(yīng)中文亂碼</title>").append("\r\n");sb.append("</head>").append("\r\n");sb.append("<body>").append("\r\n");sb.append("<h1>HttpServletResponse 字符流相應(yīng)中文亂碼</h1>").append("\r\n");sb.append("</body>").append("\r\n");sb.append("</html>");// 字符流響應(yīng)客戶端resp.getWriter().println(sb.toString());}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doGet(req, resp);} }3.3. 編寫web.xml
3.4. 部署運(yùn)行, 網(wǎng)頁(yè)的中文顯示亂碼
3.5. 查看網(wǎng)頁(yè)編碼是UTF-8, 就是我們?cè)趍eta中設(shè)置的編碼
4. 使用HttpServletResponse的setCharacterEncoding設(shè)置字符編碼GB2312
4.1. 新建一個(gè)GWSetCharacterEncodingGB2312.java類, 使用字符流響應(yīng)客戶端
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 字符流相應(yīng)中文亂碼</title>").append("\r\n");sb.append("</head>").append("\r\n");sb.append("<body>").append("\r\n");sb.append("<h1>HttpServletResponse 字符流相應(yīng)中文亂碼</h1>").append("\r\n");sb.append("</body>").append("\r\n");sb.append("</html>");// 響應(yīng)給客戶端的字符編碼GB2312resp.setCharacterEncoding("GB2312");// 字符流響應(yīng)客戶端resp.getWriter().println(sb.toString());}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doGet(req, resp);} }4.3. 編寫web.xml
4.4. 部署運(yùn)行, 網(wǎng)頁(yè)的中文顯示正常
4.5. 查看網(wǎng)頁(yè)編碼是GB2312, 但是我們并沒(méi)有設(shè)置網(wǎng)頁(yè)編碼
5. 使用HttpServletResponse的setCharacterEncoding設(shè)置字符編碼UTF-8
5.1. 新建一個(gè)GWSetCharacterEncodingUTF8.java類, 使用字符流響應(yīng)客戶端
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 字符流相應(yīng)中文亂碼</title>").append("\r\n");sb.append("</head>").append("\r\n");sb.append("<body>").append("\r\n");sb.append("<h1>HttpServletResponse 字符流相應(yīng)中文亂碼</h1>").append("\r\n");sb.append("</body>").append("\r\n");sb.append("</html>");// 響應(yīng)給客戶端的字符編碼UTF-8resp.setCharacterEncoding("UTF-8");// 字符流響應(yīng)客戶端resp.getWriter().println(sb.toString());}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doGet(req, resp);} }5.3. 編寫web.xml
5.4. 部署運(yùn)行, 網(wǎng)頁(yè)的中文顯示亂碼
5.5. 查看網(wǎng)頁(yè)編碼是GB2312, 但是我們并沒(méi)有設(shè)置網(wǎng)頁(yè)編碼
5.6. 這是我們?cè)跒g覽器中手動(dòng)設(shè)置編碼為UTF-8, 網(wǎng)頁(yè)的中文顯示正常
5.7. 或者, 我們?cè)趍eta中設(shè)置網(wǎng)頁(yè)編碼為UTF-8
5.8. 我們?cè)趍eta中設(shè)置網(wǎng)頁(yè)編碼為UTF-8, 重新訪問(wèn), 網(wǎng)頁(yè)中文顯示正常, 網(wǎng)頁(yè)編碼顯示為UTF-8, 其中我們并沒(méi)有手動(dòng)在瀏覽器中設(shè)置網(wǎng)頁(yè)編碼。
5.9. 從上面的例子中我們大概知道, 要想響應(yīng)的中文數(shù)據(jù)在瀏覽器中顯示正常, 需要設(shè)置網(wǎng)頁(yè)編碼和字符編碼統(tǒng)一為GB2312或者UTF-8, 推薦使用UTF-8。
6.使用HttpServletResponse的setHeader("Content-Type", "text/html; charset=GB2312"), 響應(yīng)客戶端的內(nèi)容類型是text/html 編碼是GB2312(包含字符編碼和網(wǎng)頁(yè)編碼)。
6.1. 新建一個(gè)GWSetHeaderGB2312.java類, 使用字符流響應(yīng)客戶端
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 字符流相應(yīng)中文亂碼</title>").append("\r\n");sb.append("</head>").append("\r\n");sb.append("<body>").append("\r\n");sb.append("<h1>HttpServletResponse 字符流相應(yīng)中文亂碼</h1>").append("\r\n");sb.append("</body>").append("\r\n");sb.append("</html>");// 響應(yīng)客戶端的內(nèi)容類型是text/html 編碼是GB2312(包含字符編碼和網(wǎng)頁(yè)編碼)resp.setHeader("Content-Type", "text/html; charset=GB2312");// 字符流響應(yīng)客戶端resp.getWriter().println(sb.toString());}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doGet(req, resp);} }6.3. 編寫web.xml
6.4. 部署運(yùn)行, 網(wǎng)頁(yè)的中文顯示正常
7. 使用HttpServletResponse的setHeader("Content-Type", "text/html; charset=UTF8"), 響應(yīng)客戶端的內(nèi)容類型是text/html 編碼是UTF8(包含字符編碼和網(wǎng)頁(yè)編碼)。
7.1. 新建一個(gè)GWSetHeaderUTF8.java類, 使用字符流響應(yīng)客戶端
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 字符流相應(yīng)中文亂碼</title>").append("\r\n");sb.append("</head>").append("\r\n");sb.append("<body>").append("\r\n");sb.append("<h1>HttpServletResponse 字符流相應(yīng)中文亂碼</h1>").append("\r\n");sb.append("</body>").append("\r\n");sb.append("</html>");// 響應(yīng)客戶端的內(nèi)容類型是text/html 編碼是UTF-8(包含字符編碼和網(wǎng)頁(yè)編碼)resp.setHeader("Content-Type", "text/html; charset=UTF-8");// 字符流響應(yīng)客戶端resp.getWriter().println(sb.toString());}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doGet(req, resp);} }7.3. 編寫web.xml
7.4. 部署運(yùn)行, 網(wǎng)頁(yè)的中文顯示正常
8. 用HttpServletResponse的setContentType("text/html;charset=GB2312")
, 響應(yīng)客戶端的內(nèi)容類型是text/html 編碼是GB2312(包含字符編碼和網(wǎng)頁(yè)編碼)。推薦使用setContentType方法。
8.1. 新建一個(gè)GWSetContentTypeGB2312.java類, 使用字符流響應(yīng)客戶端
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");// 網(wǎng)頁(yè)編碼GB2312sb.append("<meta charset='GB2312' />").append("\r\n");sb.append("<title>HttpServletResponse 字符流相應(yīng)中文亂碼</title>").append("\r\n");sb.append("</head>").append("\r\n");sb.append("<body>").append("\r\n");sb.append("<h1>HttpServletResponse 字符流相應(yīng)中文亂碼</h1>").append("\r\n");sb.append("</body>").append("\r\n");sb.append("</html>");// 響應(yīng)客戶端的內(nèi)容類型是text/html 編碼是GB2312(包含字符編碼和網(wǎng)頁(yè)編碼)resp.setContentType("text/html;charset=GB2312");// 字符流響應(yīng)客戶端resp.getWriter().println(sb.toString());}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doGet(req, resp);} }8.3. 編寫web.xml
8.4. 部署運(yùn)行, 網(wǎng)頁(yè)的中文顯示正常
9. 用HttpServletResponse的setContentType("text/html;charset=UTF8"), 響應(yīng)客戶端的內(nèi)容類型是text/html 編碼是UTF8(包含字符編碼和網(wǎng)頁(yè)編碼)。
9.1. 新建一個(gè)GWSetContentTypeUTF8.java類, 使用字符流響應(yīng)客戶端
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");// 網(wǎng)頁(yè)編碼UTF-8sb.append("<meta charset='UTF-8' />").append("\r\n");sb.append("<title>HttpServletResponse 字符流相應(yīng)中文亂碼</title>").append("\r\n");sb.append("</head>").append("\r\n");sb.append("<body>").append("\r\n");sb.append("<h1>HttpServletResponse 字符流相應(yīng)中文亂碼</h1>").append("\r\n");sb.append("</body>").append("\r\n");sb.append("</html>");// 響應(yīng)客戶端的內(nèi)容類型是text/html 編碼是UTF-8(包含字符編碼和網(wǎng)頁(yè)編碼)resp.setContentType("text/html;charset=UTF-8");// 字符流響應(yīng)客戶端resp.getWriter().println(sb.toString());}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doGet(req, resp);} }9.3. 編寫web.xml
9.4. 部署運(yùn)行, 網(wǎng)頁(yè)的中文顯示正常
10. 使用字節(jié)流響應(yīng)數(shù)據(jù), 字節(jié)流默認(rèn)字符編碼是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 字節(jié)流相應(yīng)中文亂碼</title>").append("\r\n");sb.append("</head>").append("\r\n");sb.append("<body>").append("\r\n");sb.append("<h1>HttpServletResponse 字節(jié)流相應(yīng)中文亂碼</h1>").append("\r\n");sb.append("</body>").append("\r\n");sb.append("</html>");// 字節(jié)流, 默認(rèn)字符編碼是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. 部署運(yùn)行
11. 不管是字節(jié)流還是字符流, 直接使用一行代碼就可以解決響應(yīng)亂碼問(wèn)題。
response.setContentType("text/html;charset=UTF-8");
注: 我們最好使用<meta charset='UTF-8'?/>設(shè)置網(wǎng)頁(yè)編碼, 都設(shè)置為UTF-8編碼。
總結(jié)
以上是生活随笔為你收集整理的012_HttpServletResponse响应乱码的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 014_下载乱码处理
- 下一篇: 015_请求转发和重定向