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响应乱码的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 014_下载乱码处理
- 下一篇: 015_请求转发和重定向