response亂碼的問題及setCharacterEncoding()與setContentType()區別
阿新 • • 發佈:2019-02-15
這裡我們輸出的是"Hello World"英文,使用瀏覽器去訪問的時候是沒有亂碼問題,下面我們在將程式碼改寫一下,
- response.getOutputStream.write("中國".getBytes("utf-8"));
- response.setHeader("Content-type", "text/html;charset=utf-8");
這裡我們在擴充套件一下就是還有一種方式控制瀏覽器的開啟碼錶,那就是使用<meta>標籤來實現:
- response.getOutputStream().write("<meta http-equiv='content-type' content='text/html;charset=utf-8'>".getBytes());
上面使用的是位元組流的方式來給客戶機發送資料的,有時候我們可能會使用字元流來顯示資料,因為字元流在特定場合下回比位元組流更方便的輸出,其實這裡使用response.getWriter()來獲取一個PrintWriter字元流物件,然後我們可以使用PrintWriter物件的write方法直接寫字串資料,但是這裡也是需要來解決亂碼的問題,而且這裡的需要解決的問題比上面的位元組流更麻煩。下面來看一下吧:
- response.getWriter.write("中國");
- response.setHeader("Content-type","text/html;charset=utf-8")
上面我們使用位元組流來進行書寫資料的時候,是沒有問題的,因為是將"中國"的位元組資料直接寫到Response容器中的,所以不會涉及到Response容器編碼的問題。
所以說當我們在使用字元流寫入資料的時候,我們一定要記得修改Response容器的編碼,不然會出現亂碼的
- response.setCharacterEncoding("utf-8");
- response.setHeader("content-type", "text/html;charset=utf-8");
- response.setContentType("text/html;charset=utf-8");
其實這一行程式碼就相當於上面的兩行程式碼的效果,因為在setContentType方法中已經呼叫了setCharacterEncoding方法設定了Response容器的編碼了。
原文地址:http://blog.csdn.net/jiangwei0910410003/article/details/22886847