请求编码和响应编码乱码原因及解决方案
生活随笔
收集整理的這篇文章主要介紹了
请求编码和响应编码乱码原因及解决方案
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1. 響應編碼
* 當使用response.getWriter()來向客戶端發送字符數據時,如果在之前沒有設置編碼,那么默認使用iso,因為iso不支持中文,一定亂碼
* 在使用response.getWriter()之前可以使用response.setCharaceterEncoding()來設置字符流的編碼為gbk或utf-8,當然我們通常會選擇utf-8。這樣使用response.getWriter()發送的字符就是使用utf-8編碼的。但還是會出現亂碼!因為瀏覽器并不知道服務器發送過來的是什么編碼的數據!這時瀏覽器會使用gbk來解碼,所以亂碼!
* 在使用response.getWriter()之前可以使用response.setHeader("Content-type","text/html;charset=utf-8")來設置響應頭,通知瀏覽器服務器這邊使用的是utf-8編碼,而且在調用setHeader()后,還會自動執行setCharacterEncding()方法。這樣瀏覽器會使用utf-8解碼,所以就不會亂碼了!
* setHeader("Content-Type", "text/html;charset=utf-8")的快捷方法是:setContentType("text/html;charset=utf-8)。
2. 請求編碼
* 客戶端發送給服務器的請求參數是什么編碼:
客戶端首先要打開一個頁面,然后在頁面中提交表單或點擊超鏈接!在請求這個頁面時,服務器響應的編碼是什么,那么客戶端發送請求時的編碼就是什么。
* 服務器端默認使用什么編碼來解碼參數:
服務器端默認使用ISO-8859-1來解碼!所以這一定會出現亂碼的!因為iso不支持中文!
* 請求編碼處理分為兩種:GET和POST:GET請求參數不在請求體中,而POST請求參數在請求體中,所以它們的處理方式是不同的!
* GET請求編碼處理:
> String username = new String(request.getParameter("iso-8859-1"), "utf-8");
> 在server.xml中配置URIEncoding=utf-8
* POST請求編碼處理:
> String username = new String(request.getParameter("iso-8859-1"), "utf-8");
> 在獲取參數之前調用request.setCharacterEncoding("utf-8");
總結
以上是生活随笔為你收集整理的请求编码和响应编码乱码原因及解决方案的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mybatis入门案例
- 下一篇: mybatis实现多对多