问题描述
$.ajax({url : './data.do?action=unregister',dataType : 'json',contentType : "application/x-www-form-urlencoded; charset=UTF-8",timeout : 300000,data : {serviceNames : serviceNames},success : function(data) {jAlert('成功注销服务!', 'message');oTable.fnDraw();},error : function(request, status, error) {BRICK.ajaxError(request, status, error);}})上面代码,用get,设置了编码为UTF-8,依然乱码。$.ajax({url : './data.do?action=unregister',type : "post",dataType : 'json',timeout : 300000,data : {serviceNames : serviceNames},success : function(data) {jAlert('成功注销服务!', 'message');oTable.fnDraw();},error : function(request, status, error) {BRICK.ajaxError(request, status, error);}})上面代码,用post,默认使用UTF-8,没有乱码。请求方法一为何不行? 问题补充:redstarofsleep 写道
解决方案
get是直接在url后面传的,要转码成“%FG%44。。。。”这种形式的。然后后台取到后再转回来。Java里面是:Decoder.decode();Encoder.encode();
解决方案二:
如果是Tomcat,就是那个URIEncoding的问题了。
解决方案三:
浏览器Post方式发送,可以设置struts.i18n.encoding属性为UTF-8,这样Struts会在request.getParameter前自动执行request.setCharacterEncoding ("UTF-8"),以及返回视图前自动执行response.setCharacterEncoding ("UTF-8")。这样服务端就不会获取到乱码。这个属性设置,对于Get请求无效,Get方式的参数不在消息体中,在头部,这部分由Web容器来解析,默认Web容器以ISO-8859-1来编码,该编码不支持中文。对于Get请求参数只能自己转码。
解决方案四:
配置tomcat conf/server.xml<Connector executor="tomcatThreadPool" port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol" connectionTimeout="30000" maxKeepAliveRequests="1" maxHttpHeaderSize="8192" URIEncoding="UTF-8" enableLookups="false" acceptCount="100" redirectPort="8443"/>看到那个URIEncoding了吗?
解决方案五:
HttpServletRequest request = ServletActionContext.getRequest ();request.setCharacterEncoding("UTF-8")或者response.setCharacterEncoding("UTF-8")