前台用Ajax传递参数到后台,如
if(bXmlHttpSupport) {
     var sUrl = 'LoadMetadata.action?result=我们';
        var oRequest = new XMLHttpRequest();
        oRequest.onreadystatechange = function() {
         if(oRequest.readyState == 4) {
         //alert(oRequest.responseText);
             var oResource = eval('(' + oRequest.responseText + ')');
}
}
     };
     oRequest.open('POST', sUrl);
     oRequest.setRequestHeader("Content-Type","application/x-www-form-urlencoded"); 
     oRequest.send(null);
    }
里面有个参数叫result赋值为“我们”,通过struts到后台自动赋值,就变为????了。
在Eclipse里面,我已经把所有类型的页面编码方式设为UTF-8了,filter “SetCharacterEncodingFilter.java”也用了,server.xml 里面的UriEncoding设为UTF-8,web.xml里面也加入了这个filter,但是还是不行,请问还有别的办法吗?

解决方案 »

  1.   

    在后台用硬转码的方式转换参数
    guildname = new String(result.getBytes("iso-8859-1"),"gbk");试下!!
      

  2.   

    汉字在前台提交前用encodeURIComponent()函数编一下码,在后台用java.net.URLDecoder.decode(str,"utf-8")解码。
      

  3.   

    js文件使用utf8字符集,就可以啦
      

  4.   

    2楼的应该可行,ajax还是自己设定编码吧
      

  5.   

    post的情况下
    send方法参数不为null,而应该是key=value字符串
    相对的,url后不出现?之后的key=value字符串
    另外,参数传递要编码
    你用了SetCharacterEncodingFilter.java
    那么oRequest.send(null);改称
    oRequest.send(encodeURI("result=你好"));
    后台应该能取道了如果还是去不到
    oRequest.send(encodeURI(encodeURI("result=你好")));
    两次编码
    后台用java.net.URLDecoder.decode(request.getParameter("result"),"utf-8")解码一次
      

  6.   

    你既然用post方式请求,为什么还要用url来传参,
    尝试下oRequest.send("result=我们");
      

  7.   

    在后台设置一下编码,最好是统一用UTF-8,在搭建工程的时候就统一好,。如果还是不行就像楼上说的先通过JS编码一次,然后后台再解码一次就搞定了
      

  8.   

    这是基于HTTP协议的,post请求过去的参数不能解析请求头,能解析请求体中的参数。传参时别用“ var sUrl = 'LoadMetadata.action?result=我们';”,直接这样:“ var sUrl = 'LoadMetadata.action'”,将result参数写到oRequest.send(result)中即可。
      

  9.   


    试用了这个代码,时可行的,但是要在ajax里用encodeURIComponent()函数编码两次,然后再action中解码
      

  10.   

    你写的是‘post’,但是最终你还是get传参的,如果你非要这样做,可以去更改tomcat的配置文件
    conf->server.xml
     <Connector port="8080" protocol="HTTP/1.1" 
                   connectionTimeout="20000" 
                   redirectPort="8443" 
       URIEncoding="utf-8"/>
    加上红色部分应该可以解决!