response設置編碼方式 print和write方法的對比

不少場合會發現咱們輸出的中文是亂碼,這主要可能有兩方面的緣由:html

一個是瀏覽器的解析方式,另外一個是咱們服務器端返回數據的方式。只要咱們保證瀏覽器的解析方式和咱們回顯的數據的編碼格式是一致的,基本上亂碼問題就能夠獲得解決。大多數數狀況下,瀏覽器的默認編碼方式是utf-8,所以咱們只要設置服務器返回的數據的編碼方式也是utf-8便可。java

在Java後臺的Controller代碼或者Servlet代碼中用response的方法來設置輸出內容的編碼方式,主要有如下三個方法:數組


  一、response.setCharacterEncoding("UTF-8");
  二、response.setContentType("text/html;charset=UTF-8");
  三、response.setLocale(new java.util.Locale("zh","CN"));
瀏覽器


下面對以上3種方法進行差別分析:
      第一種方法只能用來設置out輸出流中所採用的編碼,可是它的優先權最高,能夠覆蓋後面兩種方法中的設置;
      第二中方法能夠設置out輸出流中字符的編碼方式,也能夠設置瀏覽器接收到這些字符後以什麼編碼方式來解碼,它的優先權低於第一種方法,  
但高於第三種方法;這種方法通知response以UTF-8輸出和瀏覽器以UTF-8打開。即等價於服務器

response.setHeader("content-type", "text/html;charset=UTF-8");通知瀏覽器以utf-8解析編碼

和response.setCharacterEncoding("UTF-8");注意第二句句須要寫在PrintWriter out = response.getWriter();的前面,若是拿到字符流後再設置編碼是沒有用的。
      第三種方法只能用來設置out輸出流中字符的編碼方式,可是它的優先權最低,在已經使用前兩種方法中的一個設置了編碼方式之後,它就被覆蓋而不起做用了。spa

 

out.write()是字節輸出流的方法 
out.print()是字符輸出流的方法 
1、區別 
1. print方法是子類JspWriter,write是Writer類中定義的方法; 
2. 重載的print方法可將各類類型的數據轉換成字符串的形式輸出,而重載的write方法只能輸出字符、字符數組和字符串等與字符相關的數據; 
3. JspWriter類型的out對象使用print方法和write方法均可以輸出字符串,可是,若是字符串對象的值爲null時,print方法將輸出內容爲「null」的字符串,而write方法則是拋出NullPointerException異常。htm

相關文章
相關標籤/搜索