1. 程式人生 > >JavaWeb學習(二)HttpServletResponse基本應用——使用OutputStream輸出中文(1)

JavaWeb學習(二)HttpServletResponse基本應用——使用OutputStream輸出中文(1)

使用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);
	    }

}

四、執行結果:

參考:http://www.cnblogs.com/xdp-gacl/p/3789624.html