ajax互動servlet返回資料和jdbc模糊查詢-中文-已經設定了UTF-8和解決了亂碼

來源:互聯網
上載者:User

標籤: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和解決了亂碼

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.