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(); }