標籤:
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——關於伺服器和瀏覽器的編碼解碼