我想使用XMLHTTP发送一个表单
大概如下:
sender = new ActiveXObject("Microsoft.XMLHTTP");
sender.onReadyStateChange = report;
sender.open("POST","recvmsg.jsp",false);
var data = "msgtarget="+msgdist.value+"&message="+msgtext.value;
sender.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
sender.send(data);
这里发送出去的英文没什么问题,如果msgtext.value为中文就不行了
查看了一下http头发现
1,用正常的表单提交时,msgdist文本框中为:123,msgtext文本框中为:你好 
Content-length:34
2,用XMLHTTP提交时,内容一样结果
Content-length:28
变少了,然后直接在后台数据看的中文是乱码,正常表单提交的那个没问题
有没有人解决过这种问题?

解决方案 »

  1.   

    很全的解决办法收集,自己看看,哪条适合你的情况:在URL中(直接发送或用response.sendRedirect(目标URL)传参)传递中文乱码的问题:
    接收方法:
    if(request.getParameter("diqu_name")!=null && request.getParameter("diqu_name").trim().length() > 0 && !request.getParameter("diqu_name").equals("null")){
    diqu_name= new String(request.getParameter("diqu_name").trim().getBytes("iso-8859-1"));
    }解答: 0.根据Web规范,URL必须以UTF-8字符集进行编码。
    服务器端的设置,Tomcat可以参考 http://tomcat.apache.org/faq/connectors.html 最后一段。
    IE设置  Internet选项->高级->总是以UTF-8发送URL(默认为true)
    firefox设置 在地址栏输入 about:config 打开内部参数页面,找到network.standard-url.encode-utf8 这一项,设为True(默认为False)
    PS. 在遵守标准方面,难得IE也有比firefox做得好的时候
    1.在传参前转码一下:变量 = java.net.URLEncoder.encode(变量);
    2.接收时处理一下:
    String value = request.getParameter("xxx");
    String str=new String(value.getBytes("iso-8859-1"),"utf-8"));
    str = java.net.URLDecoder.decode(value,"utf-8");
    3.可以用javascript的escape转化一下了,取的时候在unescape.这样应该没有什么问题
    4.你只需要在表单传送数据处理的页面加入<%request.setCharacterEncoding("gb2312"); %>就可以了!基本上能解决数据的乱码问题!特别是对于数据库的写入操作!
    5.根据我以往的测试,在url上传递参数是平台相关的,也就是你系统默认的编码方式.
    而且也没有必要在url上传递参数,也没有实际意义(你不会想让用户用url来传递参数吧?用户恐怕也不会乐意),也只要页面以get或者post方式提交都不存在乱码就可以了.
    6.写转码程序不是很好的方法,不知为什么很多人都喜欢写转码程序,我所见过的项目都没有哪个写转码程序的,一个过滤器基本就搞定大部分问题,只是有个别问题需要特别对待。
    7.url传参数跟get和post方法都不同,编码跟客户端平台相关,你无法得到一个统一的方法处理传递来的参数.跟过滤器之类的也毫无关系.如果你确定客户端平台所用编码,给你一个方法:去掉其他处理编码措施,假设客户端平台编码方式为GBK,要获取一个名为mypara的参数,
    mypara = request.getParameter("mypara");
    mypara = new String(mypara.getBytes("iso-8859-1"),"GBK");
    然后mypara就可以正常显示处理了.
    另外,很好奇你需要用url传参数的理由?
    8.修改tomcat的server.xml文件,找到Connector元素,添加UILEncoding="GBK"就可以了
      

  2.   

    一楼,你发的是jsp
    楼主的是ajax问题这个问题,我在网上查过,没什么好的解决方案,因为xmlhttp解析不自动转码
      

  3.   

    解决方法就是
    recvmsg.jsp页面中用UTF-8编码
    <%@ page language="java" pageEncoding="UTF-8" %>