JavaWeb學習(二)HttpServletResponse基本應用——使用OutputStream輸出中文(1)
阿新 • • 發佈:2018-12-28
使用OutputStream流向客戶端瀏覽器輸出中文資料
新建工程專案參考JavaWeb學習(一)建立Servlet。
一、使用OutputStream輸出中文注意問題:
在伺服器端,資料是以哪個碼錶輸出的,那麼就要控制客戶端瀏覽器以相應的碼錶開啟,比如:
outputStream.write("中國".getBytes("UTF-8"));
使用OutputStream流向客戶端瀏覽器輸出中文,以UTF-8的編碼進行輸出。 此時就要控制客戶端瀏覽器以UTF-8的編碼開啟,否則顯示的時候就會出現中文亂碼,那麼在伺服器端如何控制客戶端瀏覽器以以UTF-8的編碼顯示資料呢?可以通過設定響應頭控制瀏覽器的行為,例如:
response.setHeader("content-type", "text/html;charset=UTF-8");
通過設定響應頭控制瀏覽器以UTF-8的編碼顯示資料。
二、getBytes()需要注意的問題:
data.getBytes()
data.getBytes() 是一個將字元轉換成位元組陣列的過程,這個過程中一定會去查碼錶,如果是中文的作業系統環境,預設就是查詢查GB2312的碼錶, 將字元轉換成位元組陣列的過程就是將中文字元轉換成GB2312的碼錶上對應的數字。比如: "中"在GB2312的碼錶上對應的數字是98;"國"在GB2312的碼錶上對應的數字是99。
getBytes()方法,如果不帶引數,那麼就會根據作業系統的語言環境來選擇轉換碼錶,如果是中文作業系統,那麼就使用GB2312的碼錶。
三、程式碼:
package com.servlet.study; import java.io.IOException; import java.io.OutputStream; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class ResponseD extends HttpServlet { private static final long serialVersionUID = 4312868947607181532L; public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { outputChineseByOutputStream(response);//使用OutputStream流輸出中文 } /** * 使用OutputStream流輸出中文 * @param request * @param response * @throws IOException */ public void outputChineseByOutputStream(HttpServletResponse response) throws IOException{ String data = "中國"; //獲取OutputStream輸出流 OutputStream outputStream = response.getOutputStream(); //通過設定響應頭控制瀏覽器以UTF-8的編碼顯示資料,如果不加這句話,那麼瀏覽器顯示的將是亂碼 response.setHeader("content-type", "text/html;charset=UTF-8"); //將字元轉換成位元組陣列,指定以UTF-8編碼進行轉換 byte[] dataByteArr = data.getBytes("UTF-8"); //使用OutputStream流向客戶端輸出位元組陣列 outputStream.write(dataByteArr); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }
四、執行結果: