1. 程式人生 > >response設定編碼的三種方式以及比較

response設定編碼的三種方式以及比較

在很多場合會發現我們輸出的中文是亂碼,這主要可能有兩方面的原因:

一個是瀏覽器的解析方式,另一個是我們伺服器端返回資料的方式。只要我們保證瀏覽器的解析方式和我們回顯的資料的編碼格式是一致的,基本上亂碼問題就可以得到解決。大多數數情況下,瀏覽器的預設編碼方式是utf-8,因此我們只要設定伺服器返回的資料的編碼方式也是utf-8即可。

在Java後臺的Action程式碼或者Servlet程式碼中用response的方法來設定輸出內容的編碼方式,主要有以下三個方法:


  1、response.setCharacterEncoding("UTF-8");


  2、response.setContentType("text/html;charset=UTF-8");


  3、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輸出流中字元的編碼方式,但是它的優先權最低,在已經使用前兩種方法中的一個設定了編碼方式以後,它就被覆蓋而不起作用了。