Ajax乱码,相当严重。

取与舍 2012-02-13 12:08:08
经测试,是ajax提交到后台的数据时乱码的,是使用str.getBtyes(),这种方式转码也不行。
网上查的方法用遍了还是解决不了。
下面是Ajax的代码

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处理的方法

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


全站的编码都是utf-8,我在filter中也设置编码为utf-8
但是,但是,ajax提交中午到servlet后,显示为??????

有大神知道为什么吗?
...全文
95 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
哈特中尉 2012-02-13
  • 打赏
  • 举报
回复
看看我博客里面的文章,希望对你有帮助!

http://pengyan5945.iteye.com/blog/1103310
lgq_0714 2012-02-13
  • 打赏
  • 举报
回复


在servlet最上面把request和response的编码都设置下试试


飞跃颠峰 2012-02-13
  • 打赏
  • 举报
回复
html编码也是utf-8否?
js文件的编辑器字符集设置是urf-8否?
引入Js的地方指定字符集否?如:
<SCRIPT language="Javascript" type="text/javascript" charset="utf-8" src="xxx.js"></SCRIPT>
取与舍 2012-02-13
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 qqcrazyboy 的回复:]

看看我博客里面的文章,希望对你有帮助!

http://pengyan5945.iteye.com/blog/1103310
[/Quote]

感谢,问题解决。
取与舍 2012-02-13
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 alexandertech 的回复:]

html编码也是utf-8否?
js文件的编辑器字符集设置是urf-8否?
引入Js的地方指定字符集否?如:
<SCRIPT language="Javascript" type="text/javascript" charset="utf-8" src="xxx.js"></SCRIPT>
[/Quote]
1:html也是utf-8
2:请问如何设置
3:我没有引用外边的js文件
wangjiangbo2 2012-02-13
  • 打赏
  • 举报
回复
用request.getParameter接收参数,我一般在servlet里加上request.setCharacterEncoding("GBK");
Acesidonu 2012-02-13
  • 打赏
  • 举报
回复
d = java.net.URLDecoder.decode(d, "UTF-8");

81,122

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧