JavaEE細節問題03——關於伺服器和瀏覽器的編碼解碼

來源:互聯網
上載者:User

標籤:

Request——對於接受請求:

 擷取請求中的編碼解碼問題 :

                對於post請求,瀏覽器會根據當前頁面的編碼來對字元進行編碼,

                所以我們 直接採用:

 request.setCharacterEncoding("UTF-8");

 對於get請求,瀏覽器自動對字元進行iso-8859-1編碼

 所以我們拿到以後就要對其進行iso-8859-1解碼,使其成為原本的位元組數組,然後再進行utf-8編碼 

        Enumeration<String> enums = request.getParameterNames();        while (enums.hasMoreElements()) {            String name = enums.nextElement();            String value = request.getParameter(name);            value = new String(value.getBytes("ISO-8859-1"),"utf-8");            System.out.println(name+":"+value);        }

Response——對於發出響應:

    直接使用位元組流不指定編碼的話,伺服器會預設使用系統編碼進行編碼,瀏覽器也會使用系統預設編碼進行解碼

public void doPost(HttpServletRequest request, HttpServletResponse response)        throws ServletException, IOException {    OutputStream os = response.getOutputStream();    os.write("我是好人".getBytes());//不指定編碼的話將使用系統預設編碼}

=====瀏覽器正常顯示====

使用位元組流指定編碼,並指定Http協議的相應資訊,告訴瀏覽器用什麼編碼解析位元組流

public void doPost(HttpServletRequest request, HttpServletResponse response)    OutputStream os = response.getOutputStream();    // os.write("我是好人".getBytes());//不指定編碼的話將使用系統預設編碼    os.write("我也是好人".getBytes("utf-8"));//指定編碼,指定編碼之後一點要在回應標頭中指定瀏覽器解析的編碼    //response.setHeader("Content-Type", "text/html;charset=utf-8");    response.setContentType("text/html;charset=utf-8");    //上述兩種都可以}

        使用字元流不指定編碼的話,伺服器會預設使用ISO-8859-1進行編碼。

所以如果使用字元流傳輸漢字,一定要設定編碼

public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {    //response.getWriter().write("我是好人");// 不行的,因為預設ISO-8859-1編碼    response.setCharacterEncoding("utf-8");//設定成utf-8編碼    response.setHeader("Content-Type", "text/html;charset=utf-8");    response.getWriter().write("我是好人");}

然後setContentType("text/html;charset=編碼")有setCharacterEncoding和setHeader("Content-Type", "text/html;charset=編碼")的效果

public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {    //response.getWriter().write("我是好人");// 不行的,因為預設ISO-8859-1編碼            /*            response.setCharacterEncoding("utf-8");//設定成utf-8編碼            response.setHeader("Content-Type", "text/html;charset=utf-8");            */    response.setContentType("text/html;charset=utf-8");//這一句可以達到上面兩句的效果    response.getWriter().write("我是好人");}



JavaEE細節問題03——關於伺服器和瀏覽器的編碼解碼

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.