经测试,是ajax提交到后台的数据时乱码的,是使用str.getBtyes(),这种方式转码也不行。
网上查的方法用遍了还是解决不了。
下面是Ajax的代码
- JScript code
function InitAjax(){ var ajax=false; try { ajax = new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) { try { ajax = new ActiveXObject("Microsoft.XMLHTTP"); } catch (E) { ajax = false; } } if (!ajax && typeof XMLHttpRequest!='undefined') { ajax = new XMLHttpRequest(); } return ajax; }function sendMsg(){ if(connection){ document.getElementById("msgByLine").innerHTML += "<li>您还没有建立连接.</li>"; return; } var msg = document.getElementById("text").value; if(msg == ""){ return; } document.getElementById("text").value = ""; var url = "servlet/Online?flag=2&id="+flag+"&content="+ msg +"&da="+new Date(); var ajax = InitAjax(); url = encodeURI(url); url = encodeURI(url); ajax.open("GET", url, true); //ajax.setRequestHeader("Content-Type","text/html;charset=UTF-8"); //ajax.setRequestHeader("Content-Type", "application/x-www-form-urlencoded;"); //ajax.setRequestHeader("content-Type","text/html;charset=utf-8;"); ajax.onreadystatechange = function() { if (ajax.readyState == 4 && ajax.status == 200) { var responseT = ajax.responseText; if(responseT == "over"){ document.getElementById("msgByLine").innerHTML += "<li>您已经结束对话·</li>"; }else{ var d = new Date(); var hours = add_zero(d.getHours())+":"; var minutes = add_zero(d.getMinutes())+":"; var seconds=add_zero(d.getSeconds()); document.getElementById("msgByLine").innerHTML += "<li><b>我 "+ hours + minutes + seconds +":</b> "+msg+"</li>"; } var div = document.getElementById("message"); div.scrollTop = div.scrollHeight; } } ajax.send(null);
下面是Servlet处理的方法
- Java code
if(flag.equals("2")||flag.equals("1")){ int random = Integer.parseInt(request.getParameter("id")); if(chat.get(random) == null){ //已经结束对话 out.print("over"); return; } //检查聊天记录是否超过100条,则删除前50条 if(chat.get(random).size() > 100) for(int i = 0; i < 50; i++){ chat.get(random).remove(i); } //处理中文乱码 String d = request.getParameter("content"); System.out.println(request.getQueryString()); d = new String(d.getBytes("ISO-8859-1"),"UTF-8"); //System.out.println(d); //String content = new String(d.getBytes("ISO-8859-1"),"utf-8"); //System.out.println(d); //String dd = new String(d.getBytes("ISO-8859-1"),"UTF-8"); //System.out.println("+++++"+dd); System.out.println(d); Online online = new Online(); online.setFlag(Integer.parseInt(flag)); online.setContent(d); online.setDate(new SimpleDateFormat("HH:mm:ss").format(System.currentTimeMillis())); chat.get(random).add(online); }