如果用TOMCAT
把server.xml中
<Connector port="8080" maxThreads="150" minSpareThreads="25" maxSpareThreads="75" enableLookups="false" redirectPort="8443" acceptCount="100" debug="0" connectionTimeout="20000" disableUploadTimeout="true" URIEncoding="GBK"/>

解决方案 »

  1.   

    1.看看你整体的jsp页面是不是用的gbk
    2.看看使用的编译工具编译的格式是不是gbk比方说eclipse里面的js编译方式改为gbk
      

  2.   


    我能改为gbk的地方都改了呀,还是不行,我也试着都为UTF-8,也是一样的不行呀
      

  3.   

    在你的ajax servlet的service方法中、在response做输出之前:
    response.setContentType("text/xml; charset=GBK");
    加上那个试试
      

  4.   

    我在页面的设置:
    xmlhttp.setRequestHeader("Method", "POST "+ url +" HTTP/1.1");
    xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
      

  5.   

    乱码解一下就是了。
    中文问题一直是java的头疼的问题,只能头疼医头,脚疼医脚String str = new String(str.getbytes("iso8859-1"),"gb2312")什么gbk、iso8859-1、gb18030、gb2312统统使唤一般轮番上阵,我还就不信解不开
      

  6.   

      我以前也遇到这问题,后来全改成UTF-8就好了,因为Ajax默认的编码就是UTF-8,其他编码没用....
      

  7.   

    我也有这个问题..关注...据说是因为ajax用URL传送 但是URL不能解析识别中文什么的,得escape 和 unescape不过我还是没搞定,希望楼主可以试试看我说的这个,如果搞定了还请贴出解决方法.
      

  8.   

    get传递用encodeURIComponent()转一下码
    返回ajax需要的数据,直接用utf-8肯定没错。
      

  9.   

    直接写个Filter就行了 每次调用*.do文件时执行
      

  10.   


    我若不用send(...)的,可以通过转码来解析的,用send后,就乱了.
      

  11.   


    这个也试了,用url=encodeURI(url); 或url=escape(url);网上找的资料,都要写两句,服务器上用 String userName= request.getParameter("userName");
    try {
    userName= java.net.URLDecoder.decode(userName,"UTF-8");
    } catch (UnsupportedEncodingException e) {
    // TODO 自动生成 catch 块
    e.printStackTrace();

    编码还是不正常,若不用send(...),是没问题的,有人可能会问,你为何非要用send(...)呢?原因是这样的,不用send(...)的话,那传输的字符串长度有限(我本机测过,只能传1628个字节),而用send却很长(具体多长我没实测,四五千个以上吧),后来要想了这样一个办法,不是说中文用ajax传会乱吗,那我可不可以把中文转为类似英文的再传,服务器取到后,再转回来不是正常了吗?于是我决定弄个类似“中文翻译为英文”和“英文翻译为中文”的类,(注:这个类暂时我没写),后来又想想,要用这个类,不是要用到DWR吗?
    啊,提到DWR,我茅塞顿开,干吗不用DWR来实现呢?还搞得这么麻烦,
    后来试了一下,用DWR不存在乱码问题(可能是我暂时没发现吧,不一定不存在),
    问题得到解决。还是DWR好用啊。建议类似乱码问题的朋友,可以学一下
    DWR,比ajax好用多了。
    问题是通过另一种方式解决了,但用ajax乱码的问题,我是还没完全解决的,
    有兴趣的朋友,可以试着用我那个类似翻译的思路想想,应该可以解决的。由于本质的没解决,这个帖暂不结。
      

  12.   

    java 里的页面设置字符集是没用的 还要在其他的地方设置 我遇到过一次这种类似的问题 要全部统一的呵呵,其他的地方还要设置的
      

  13.   


    response.setCharterEncoding("GBK")
    request.setCharterEncoding("GBK")
      

  14.   

    注意JSP和HTML的文件编码
    你可以注意一下那个文件是什么编码的
    用UltraEdit等工具验证下
    还有
    在写Script块时候要写
    charset="GBK"
      

  15.   

    xmlHttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded;charset=gbk");刚遇到LZ一样的问题,也是send过去的时候乱码,后来在上面那句里将charset改为utf-8就好了,莫名其妙...
    默认不是utf-8的吗...?
      

  16.   

    ajax的时候处理一下
    var s="";
    var names=document.getElementsByTagName("input");
    for(var i=0,l=names.length;i<l;i++)
    {
          if(names[i].name)
          s+=names[i].name+"="+encodeURIComponent(names[i].value)+"&";
    }
    s+="time="+new Data().getTime();
    s=s.replace(/%/g,"#");这样在request.getParameter("");汉字内容时候会获取类似#ED#E4#AB#EA#A3#3E的utf-8编码
    解码处理函数在下面
                        public String decodeUTF(String s) throws IOException
      {
      byte[] b=null;
        if(getISUTF(s))
        {
         b=new byte[s.length()/3];
         System.out.println(s);
         System.out.println(s.length());
         for(int i=0,j=0;i<s.length();i+=3,j++)
         {
         b[j]=getByte(s.charAt(i+1),s.charAt(i+2));
         }
         System.out.println(new String(b,"utf-8"));
        }
        else
        {
         b=s.getBytes();
        }
        return new String(b,"utf-8");
      }
      public boolean getISUTF(String s)
      {
      if(s.length()%3!=0)
      return false;
      for(int i=0;i<s.length();i+=3)
      {
      if(s.charAt(i)!='#')
      return false;
      }
    return true;
      }
      public byte getInt(char a)
      {
     switch(a)
     {
      case '0':return (byte)0;
      case '1':return (byte)1;
      case '2':return (byte)2;
      case '3':return (byte)3;
      case '4':return (byte)4;
      case '5':return (byte)5;
      case '6':return (byte)6;
      case '7':return (byte)7;
      case '8':return (byte)8;
      case '9':return (byte)9;
      case 'A':return (byte)10;
      case 'B':return (byte)11;
      case 'C':return (byte)12;
      case 'D':return (byte)13;
      case 'E':return (byte)14;
      case 'F':return (byte)15;
     }
    return -1;
      }
      public byte getByte(char a,char c)
      {
      byte b;
      b=(byte) (getInt(a)*16+getInt(c));
      return b;
      }