獲取請求中的編碼解碼問題 :html
對於post請求,瀏覽器會根據當前頁面的編碼來對字符進行編碼,java
因此咱們 直接採用:數組
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); }
注意:瀏覽器會根據設置的編碼來對url中非保留字符進行encode,在mac osx上,對於中文的url參數會根據utf-8編碼將中文進行encodeURI(這裏感謝@雙城記 對個人指正)post
直接使用字節流不指定編碼的話,服務器會默認使用系統編碼進行編碼,瀏覽器也會使用系統默認編碼進行解碼編碼
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { OutputStream os = response.getOutputStream(); os.write("我是好人".getBytes());//不指定編碼的話將使用系統默認編碼 }
=====瀏覽器正常顯示====url
使用字節流指定編碼,並指定Http協議的相應信息,告訴瀏覽器用什麼編碼解析字節流spa
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進行編碼。.net
因此若是使用字符流傳輸漢字,必定要設置編碼
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("我是好人"); }