首页 > 代码库 > ajax交互servlet返回数据和jdbc模糊查询-中文-已经设置了UTF-8和解决了乱码

ajax交互servlet返回数据和jdbc模糊查询-中文-已经设置了UTF-8和解决了乱码

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和解决了乱码