很奇怪,都弄成统一编码了,还是乱码,于是看了很多网上的文章,最后总结成以下几点:
1、 <META http-equiv=Content-Type content="text/html; charset=utf-8">;
2、传递参数时:var url="/Province-City/selectedservlet?selectValue="+encodeURI(selectValue)+"&selectId="+selectId+"&sid="+Math.random();
不管是get还是post请求,在传递参数时都用encodeURI方法来处理,它的用处是将字符串转成utf-8编码方式。当然最好在url中添加一个Math.random()函数,这是因为ajax是有缓存机制的,所以添加一个时间戳,有利于每次请求都是一个新的请求,这样就不会一开始出错就老出现同样的错误了。
3、当然,如果是get方法的话,就可以直接这样了:ajax.open("GET",url,true);
post方法时:ajax.open("POST",url,true);
ajax.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');
这是万全之策。
4、servlet后台中:response.setContentType("text/html; charset=UTF-8");
String selectV=request.getParameter("selectValue");
selectV=new String(selectV.getBytes("ISO-8859-1"),"utf-8");
这样,好像都可以解决问题了。不管是后台得到的参数还是后台返回给页面的参数都不会出现乱码了。
当然很奇怪的就是:在另外一个工程里面,用的get请求,页面: var url="http://localhost/ajax2/RegServlet?uname="+uname;
ajax.open("get",url,true);
后台只用了:response.setCharacterEncoding("utf-8");
String uname=request.getParameter("uname");
System.out.println("没有乱码哎:"+uname);却没有乱码,而在新的 一个工程里面用同样的方法,却出现了乱码。用post也差不多,以前都那样,没出现乱码,可是后面新的工程都出现乱码。很希望高人能够解答啊???非常谢谢了