標籤:iso 結果 get clip 表單 ... 資料 傳遞資料 工程
1.編碼是將字元按一定翻譯方式轉換成位元組儲存在記憶體或外存中,解碼是按照一定翻譯方式將儲存中的位元組轉換成字元。
2.ASCII是單位元組,最高位總為0,相當於只佔用了一個位元組的7位,2^7=128個字元,相當於鍵盤上的128個鍵,有大小寫因為字母,有*,%¥#@!+....等這些可顯示字元,也有不可以顯示的控制符F1,ctr。。。
而ISO-8859-1是啟用了ASCII碼的最高位,理論上是能再多128位,實際上沒用掉這麼多,至於多了那些,你們自己查下表
UTF-8是可變長的,具體中文幾個位元組,怎麼傳輸,怎麼區分是ASCII還是什麼的你們自己去查看,這個應該是熟悉的,萬國碼。
3.web中,在瀏覽器有表單通過URL,AJAX等傳遞資料方式,這個時候就有了編碼的地方,比如你表單資料用get方式傳,這個參數是怎麼編碼的呢,然後到後台服務端,我們要接收那個參數,接收時候,我們要把那個參數從記憶體中拿出來,這個時候我們又該把它編碼成什麼,然後到資料庫,資料庫又是怎麼比較和編碼資料的。當這3個地方有時候有了區別就會導致亂碼。這個解決亂碼,網上方案到處都是,你也可以搜尋“java 模糊查詢 中文”等看看。
4.當你可以列印那些sql語句看看是否有亂碼,如果沒有了,但是比如在“jdbc 模糊查詢時用statement去執行查詢”就會有bug,你擷取不到結果的,rs.next()總是false,解決就是用preparestatement 替代statement。一下子還沒出來的話,清理下瀏覽器和工程,重啟下eclipse。
5.ajax互動servlet返回資料給ajax。
在Servlet編程中,經常需要通過response對象將一些資訊返回給瀏覽器,給我們的用戶端,而我們在伺服器端顯示的中文,但是響應給用戶端瀏覽器卻是亂碼,這主要是由於response對象的getWriter()方法返回的PrintWriter對象預設使用“ISO-8859-1”字元集編碼進行Unicode字串到位元組數組的轉換,由於ISO8859-1字元集中根本就沒有包含中文字元,所以Java在進行轉換的時候會將無效的字元編碼輸出給用戶端,於是便出現了亂碼,為此ServletResponse介面中便定義了setCharacterEncoding、setContentType等方法來指定getWriter方法返回的PrintWriter對象所使用的字元集編碼,所以我們在寫Servlet程式中,在調用getWriter方法之前設定這些方法的值。我們為了防止亂碼,經常將以下兩條語句一起寫上:
response.setContentType(“text/html;charset=utf-8”);
response. setCharacterEncoding(“UTF-8”);
//ajax<script type="text/javascript"> function findsc(){ $(‘#metable‘).empty(); $.ajax({ url: "find", type: "get", data:{ key:$(‘#keywords‘).val() }, success:function(data){ alert(data); $(‘#metable‘).append(data); } }); } </script>//servlet關鍵protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub response.setContentType("text/html;charset=utf-8"); response. setCharacterEncoding("UTF-8"); response.getWriter().append("Served at: ").append(request.getContextPath()); MyServiceDao myServiceDao=new MyServiceDao(); List<Sc> temp; PrintWriter outme=response.getWriter(); outme.print("<tr><td style=‘background:#FFF68F;‘>學號</td><td style=‘background:#FFF68F;‘>姓名</td><td style=‘background:#FFF68F;‘>語文</td><td style=‘background:#FFF68F;‘>數學</td><td style=‘background:#FFF68F;‘>英語</td><tr>"); try { temp=myServiceDao.getScByName(request.getParameter("key")); for(Sc sc : temp){ outme.print( "<tr><td style=‘background:#CAFF70;‘>"+sc.getId() +"</td><td style=‘background:#CAFF70;‘>"+sc.getName() +"</td><td style=‘background:#CAFF70;‘>"+sc.getYuwen() +"</td><td style=‘background:#CAFF70;‘>"+sc.getShuxue() +"</td><td style=‘background:#CAFF70;‘>"+sc.getYingyu() +"</td><tr>" ); } } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } outme.close(); }
ajax互動servlet返回資料和jdbc模糊查詢-中文-已經設定了UTF-8和解決了亂碼