1. 程式人生 > >編碼--(解決亂碼問題)

編碼--(解決亂碼問題)

開發十年,就只剩下這套架構體系了! >>>   

編碼
    常見字元編碼:iso-8859-1(不支援中文)、gb2312、gbk、gb18030(系統預設編碼,中國的國標碼)、
    utf-8(萬國碼,支援全世界的編碼,所以我們使用這個)

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請求編碼處理:
    > 在server.xml中配置URIEncoding=utf-8 ,但是,不能用!!修改tomcat配置耦合度高不可以!
    > String username = new String(request.getParameter("iso-8859-1"), "utf-8"); (可以用)
  * POST請求編碼處理:
    > String username = new String(request.getParameter("iso-8859-1"), "utf-8");
    > 在獲取引數之前呼叫request.setCharacterEncoding("utf-8");

                                                                                                    請求的編碼過程

3、URL編碼
  表單的型別:Content-Type: application/x-www-form-urlencoded,就是把中文轉換成%後面跟隨兩位的16進位制。
  為什麼要用它:在客戶端和伺服器之間傳遞中文時需要把它轉換成網路適合的方式。

  * 它不是字元編碼!
  * 它是用來在客戶端與伺服器之間傳遞引數用的一種方式!
  * URL編碼需要先指定一種字元編碼,把字串解碼後,得到byte[],然後把小於0的位元組+256,再轉換成16進位制。
        前面再新增一個%。
  * POST請求預設就使用URL編碼!tomcat會自動使用URL解碼!
  * URL編碼:String username = URLEncoder.encode(username, "utf-8");
  * URL解碼:String username = URLDecoder.decode(username, "utf-8");

 

                                                url 編碼過程