在jsp與servlet中處理中文亂碼問題

1.向頁面輸出中文(分爲字節流和字符流)response

字節流:代碼中中文的編碼和瀏覽器的編碼需要一致
解決亂碼:
  * 設置瀏覽器默認打開時候的編碼集
  * 獲得字節數組的時候,傳入一個編碼集
*** 將兩個編碼一致即可
// 設置瀏覽器默認打開的編碼
response.setHeader("Content-Type", "text/html;charset=utf-8");
// 字節數組的時候設置編碼,默認是gbk
response.getOutputStream().write("中文".getBytes("utf-8"));


字符流:
解決亂碼:
* 設置瀏覽器的打開時的字符集
* 設置response緩衝區的編碼(默認是ISO-8859-1編碼,不支持中文)
// 設置瀏覽器打開的時候的編碼
response.setHeader("Content-Type", "text/html;charset=utf-8");
// 設置response緩衝區的編碼
response.setCharacterEncoding("utf-8");
response.getWriter().write("中文");

*** 字符流編碼簡寫形式,這一句相當於上面兩句 
response.setContentType("text/html;charset=utf-8");

注意事項:字節流和字符流是互斥的,只能用一種


2.處理參數帶有中文(分爲post和get)request

post:直接通過request接收數據 存到request的緩衝區,默認編碼是ISO-8859-1(不支持中文)
  解決:* 設置request的緩衝區的編碼

                                request.setCharacterEncoding("utf-8");


  get: 數據需要通過地址欄 URL 編碼
3種解決方式:

  * 1.使用URLEncoder編碼,URLDecoder解碼
  username = URLEncoder.encode(username, "ISO-8859-1");
username = URLDecoder.decode(username, "utf-8");
 
  * 2.修改Tomcat的編碼值(不建議,會影響其它項目)
修改server.xml 
<Connector port="80" protocol="HTTP/1.1" 
   connectionTimeout="20000" 
   redirectPort="8443" URIEncoding="utf-8"/>
* 必須有修改tomcat服務器配置文件權限

  * 3.String的構造方法(相當於方法1的簡化,建議使用這種方式)
  username = new String(username.getBytes("ISO-8859-1"),"utf-8");


總結:

Response亂碼
字節流
// 設置瀏覽器默認打開的編碼
response.setHeader("Content-Type", "text/html;charset=utf-8");
// 字節數組的時候設置編碼,默認是gbk
response.getOutputStream().write("中文".getBytes("utf-8"));
字符流
解決亂碼:
* 設置瀏覽器的打開時候的字符集和response緩衝區的編碼
response.setContentType("text/html;charset=utf-8");
Request亂碼
POST
* 設置request的緩衝區的編碼
request.setCharacterEncoding("utf-8");
GET
* 3.String的構造方法
username = new String(username.getBytes("ISO-8859-1"),"utf-8");

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章