1.傳輸中文的亂碼問題
接收中文亂碼(就是頁面向服務(wù)器提交數(shù)據(jù))
get方式
解決方式:new String(string.getBytes("ISO-8859-1"),"UTF-8");
分析:表單中文數(shù)據(jù)在頁面以ISO編碼后,通過Http協(xié)議傳輸岂贩,到達(dá)Servlet后,若以UTF-8解碼,會(huì)出現(xiàn)亂碼。所以需要先轉(zhuǎn)成字節(jié)(ISO-8859-1解碼筝家,傳過來的是以它編碼的)惠遏,再包裝成字符串(UTF-8編碼)。Servlet中就可以顯示了(UTF-8)矫户。
post方式
解決方式:request.setCharacterEncoding("UTF-8");
分析:這里單向設(shè)置服務(wù)器端的解碼方式UTF-8即可(注意是通過request設(shè)置)。因?yàn)閺姆?wù)器來的頁面一般已經(jīng)設(shè)置成了UTF-8格式了(例如JSP提交的頁面)残邀。
輸出中文亂碼(服務(wù)器向頁面輸出)
字符流
解決方式一:response.setContentType("text/html;charset=UTF-8");
等價(jià)于解決方式二:response.setCharacterEncoding("UTF-8");//UTF-8編碼
response.setHeader("Context-Type","text/html;charset=utf-8");
//通知瀏覽器UTF-8解碼網(wǎng)頁文件
分析:方式一和方式二作用一樣皆辽。這種場(chǎng)景一般是Servlet程序中有中文字符,需要向頁面輸出芥挣。先設(shè)置服務(wù)器端的編碼方式UTF-8(注意是通過response設(shè)置)驱闷,再通過設(shè)置響應(yīng)的頭字段,通知瀏覽器以UTF-8進(jìn)行解碼即可空免。
字節(jié)流
解決方式:response.setHeader("Content-Type", "text/html;charset=UTF-8");
// 設(shè)置瀏覽器默認(rèn)打開的時(shí)候采用的字符集編碼
response.getOutputStream().write("中文".getBytes("UTF-8"));
// 設(shè)置中文轉(zhuǎn)成字節(jié)數(shù)組的時(shí)候取出的編碼空另,默認(rèn)會(huì)是ISO-8859-1
分析:字節(jié)流的中文輸出包括兩步:先通知瀏覽器以UTF-8解碼。再想頁面(字節(jié)流)輸出字節(jié)蹋砚。輸出內(nèi)容:將中文字符串轉(zhuǎn)成字節(jié)數(shù)組(并設(shè)置以指定的UTF-8編碼)扼菠。
2.跳轉(zhuǎn)
//內(nèi)部跳轉(zhuǎn)
request.getRequestDispatcher(url).forward(request, response);
//重定向
response.sendRedirect(url);