java web要求和呼應中湧現中文亂碼成績的解析。本站提示廣大學習愛好者:(java web要求和呼應中湧現中文亂碼成績的解析)文章只能為提供參考,不一定能成為您想要的結果。以下是java web要求和呼應中湧現中文亂碼成績的解析正文
解釋:在盤算機中保留的一切文本信息是以必定的編碼表(0,1,0,1)來保留我們所熟悉的字符(漢字或英文字符),由字符到盤算機存儲的二進制進程是編碼,由讀取二進制到文本的進程稱為解碼。而字符編碼有多種分歧的編碼表,所以,假如編碼格局息爭碼格局不是統一個碼表就會湧現亂碼。想要防止湧現亂碼,須要使保留和讀取時應用雷同的碼表。
在java web編程中常常會湧現亂碼,如今具體講授一下若何停止設置,防止亂碼
1 網頁編碼
在編寫網頁的時刻,須要指定網頁的編碼格局,應用<meta http-equiv="content-type" content="text/html; charset=UTF-8">來指定。此時閱讀器讀取或許發送要求的時刻會以指定的編碼格局保留或發送數據。在此是以utf-8情勢。
例如代碼片斷:
<form action="/Pro1/bb" method="post"> 用戶名: <input type="text" name="username" ><br> 性別: 男<input type="radio" name="gender" value="男"> 女<input type="radio" name="gender" value="女"><br> 愛好的色彩:<br> 紅<input type="checkbox" name="color" value="紅"> 綠<input type="checkbox" name="color" value="綠"> 藍<input type="checkbox" name="color" value="藍"> <br>來自的國度 <select name="country"> <option value="中國">中國</option> <option value="美國">美國</option> <option value="日本">日本</option> </select> <br> <input type="submit" value="提交"> <input type="reset" value="重置"> </form>
2 後端讀取要求數據
在java web的servlet中要想獲得要求的數據,須要將發送過去的二進制數據依照響應的碼表停止解碼才可以獲得響應的人類可以讀懂字符串。這個例子中是應用post辦法,所以在處置post要求中,在獲得有中文的要求參數前須要先設置編碼格局,否則會湧現亂碼。由於辦事器默許應用iso-8859-1編碼表停止解碼。
固然,假如想要在輸入中輸入中文字符,也須要應用同一的字符編碼,此處是utf-8,代碼以下
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("utf-8"); response.setContentType("text/html;charset=utf-8"); PrintWriter out = response.getWriter(); String username = request.getParameter("username"); String gender = request.getParameter("gender"); String[] colors = request.getParameterValues("color"); String country = request.getParameter("country"); out.println("<!DOCTYPE HTML>"); out.println("<HTML>"); out.println(" <HEAD><TITLE>測試servlet</TITLE></HEAD>"); out.println(" <BODY>"); out.print("<h1>以下是您的輸出</h1>"); out.print("<p>"); out.print("您的用戶名:"+username+"<br>"); out.print("您的性別:"+gender+"<br>"); out.print("您愛好的色彩:"); for(String cr:colors){ out.print(cr+" "); } out.print("<br>"); out.print("您的國度:"+country+"<br>"); out.print("</p>"); out.println(" </BODY>"); out.println("</HTML>"); }
留意:此處的request.setCharacterEncoding("utf-8");只對要求實體的內容有用。post要求參數是寄存在要求實體中,get辦法的要求參數是放在url的前面以問號開端,‘&'銜接多個參數。所以想要獲得get辦法的參數,須要應用手動解碼,或許應用filter。
手動解碼辦法,為了簡略起見只對性別停止解碼,現實應用中須要對每個參數停止解碼:String gender = new String(req.getParameter("gender").getBytes("iso-8859-1"),"utf-8") ;
到此時便可以完善處理網頁和辦事器端湧現漢字亂碼的景象,記住一條,湧現亂碼的都是由於編碼息爭碼應用分歧編碼表的緣由,要應用雷同的編碼表,便可處理成績。
以上就是本文的全體內容,願望對年夜家的進修有所贊助,也願望年夜家多多支撐。