[url=http://www.haogongju.net/art/293799]java adf 使用ajax传递参数中有中文乱码问题[/url]
本人近期在写一个ajax方式传递一些参数到后台,因为参数中有中文,导致后台调式的时候发现是乱码,在网上搜索了一下,发现有很多解决方案(其中msnvip说的很详细),试了几种,发现下面这种还是比较方便的。关键的不是转码,而是全部统一使用UTF-8编码,然后在xmlhttp Post时使用encodeURI即可。 
网上有人说试过用转码的,有漏洞,对于特殊字符如$,%等则会不正确。我个人比较保守,不喜欢用一些有变数的东西。

我们可以在java adf的js库函数中找到写sendAjaxRequest的函数(在esri_core.js)文件中,这里的是用encodeURIComponent这个js函数来编码的,encodeURIComponent这个js函数,它是将中文、韩文等特殊字符转换成utf-8格式的url编码,所以如果给后台传递参数需要使用encodeURIComponent时需要后台解码对utf-8支持(form中的编码方式和当前页面编码方式相同)。既然esri是用utf-8来指定发送数据的编码格式 的,那我们最简单的当然是所有都采用UTF-8格式了。

一、发送数据中的参数有中文,在服务器端接收参数值是乱码解决:
1.在js端传递参数改写一下:
[code]var layername1=encodeURI(encodeURI(layername));  //////传递中文乱码问题,编码两次(两次,很关键)
    var url = EsriUtils.getServerUrl("mapForm");
    var map = EsriControls.maps["map1"];
    var params = "FindProv=FindProv&mapId=map1&"+"id="+id+"&" +"LayerName="+layername1+"&"+ EsriUtils.buildRequestParams(map.formId);
    
    var xmlHttp = EsriUtils.sendAjaxRequest(url,params,true,function()
    { updateInfoResponse(xmlHttp); });  [/code]

2.在后台改写代码:
               [code]this.layername=(String)paramMap.get("LayerName");
       try {
    this.layername=java.net.URLDecoder.decode(this.layername, "UTF-8");  //将js代码中的编码的过的参数解码
   } catch (UnsupportedEncodingException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   } [/code]

二、解决返回来的responseText或responseXML的值中含有中文是乱码步骤:
返回来的responseText或responseXML的值中含有中文是乱码 
原因:AJAX在接收responseText或responseXML的值的时候是按照UTF-8的格式来解码的,如果服务器段发送的数据不是UTF-8的格式,那么接收responseText或responseXML的值有可能为乱码。 
解决办法:在服务器指定发送数据的格式: 
在jsp页面文件中: 
[code]response.setContentType("text/text;charset=UTF-8");//返回的是txt文本文件 
or 
response.setContentType("text/xml;charset=UTF-8");//返回的xml文件 [/code]

总结:1)ESRIajax提交数据的格式默认为utf-8,利用javascript的提供的escape()或encodeURI()方法编码.在服务器端接收的时候要使用java.net.URLDecoder.decode("your String","UTF-8")方法进行解码. 
      2)xtmlhttp 返回的数据默认的字符编码是utf-8,所以服务器要向客户端发送数据的时候,也要采用utf-8编码

如果还不行,尝试把jsp,htm,java文件用UTF-8编码格式保存. (我的文件就是这样格式的如jsp文件: <%@page contentType="text/html" pageEncoding="UTF-8" %>)
总之:前后台数据交互都采用utf-8编码就行了.