ajax处理中文请求和返回中文结果总结

ajax是一项很好的技术,但是它带来方便的同时也有很多限制,比如它只能处理utf-8的字符。

在ajax的请求和结果中经常会出现乱码的问题,主要就是因为utf-8和网页的gb2312或者gbk的转换问题。

1、如果网页使用的不是utf-8,那么在提交时就会出现乱码问题。

2、如果服务器使用的不是utf-8,那么在返回时就会出现乱码问题。

 

有种简单的处理方法,就是把网页的编码和服务器的编码都改成utf-8,就不会出现乱码问题,但问题是,现在以gb字符

集的网页有很多,这种方法显然不能普遍适用。那么就出现了一些其他的方法,在这里总结一些自己测试成功的方法:

 

首先比较方便的方法是设置filter,但是如果本来有自己的filter的话,为了兼容,可以加上一个header分辨一下,下面是

csdn上一位朋友写得filter的代码,这里摘过来了:

 

  1. package ajax_start.common;
  2. import java.io.IOException;
  3. import javax.servlet.Filter;
  4. import javax.servlet.FilterChain;
  5. import javax.servlet.FilterConfig;
  6. import javax.servlet.ServletException;
  7. import javax.servlet.ServletRequest;
  8. import javax.servlet.ServletResponse;
  9. import javax.servlet.http.HttpServletRequest;
  10. public class SetCharacterEncodingFilter implements Filter {
  11.     public SetCharacterEncodingFilter() {
  12.         super();
  13.     }
  14.     protected FilterConfig filterConfig = null;
  15.     protected String ajaxEncoding = "UTF-8";
  16.     protected String commonEncoding;
  17.     protected boolean ignore = true;
  18.     public void init(FilterConfig filterConfig) throws ServletException {
  19.         this.filterConfig = filterConfig;
  20.         commonEncoding = filterConfig.getInitParameter("CommonRequestEncoding");
  21.         String value = filterConfig.getInitParameter("ignore");
  22.         if (value == null)
  23.             this.ignore = true;
  24.         else if (value.equalsIgnoreCase("true"))
  25.             this.ignore = true;
  26.         else if (value.equalsIgnoreCase("yes"))
  27.             this.ignore = true;
  28.         else
  29.             this.ignore = false;
  30.     }
  31.     public void doFilter(ServletRequest req, ServletResponse res,
  32.             FilterChain filterChain)
  33.     {
  34.         try {
  35.             HttpServletRequest request = (HttpServletRequest) req;
  36.             if (ignore || (request.getCharacterEncoding() == null)) {
  37.                 if (request.getHeader("RequestType") != null
  38.                         && request.getHeader("RequestType").equalsIgnoreCase(
  39.                                 "ajax")) {
  40.                     request.setCharacterEncoding(ajaxEncoding);
  41.                 } else if (commonEncoding != null) {
  42.                     request.setCharacterEncoding(commonEncoding);
  43.                 } else {
  44.                     request.setCharacterEncoding("UTF-8");
  45.                 }
  46.             }
  47.             filterChain.doFilter(req, res);
  48.         } catch (IOException e) {
  49.             e.printStackTrace();
  50.         } catch (ServletException e) {
  51.             e.printStackTrace();
  52.         }
  53.     }
  54.     public void destroy() {
  55.         this.commonEncoding = null;
  56.         this.filterConfig = null;
  57.     }
  58. }

web.xml的设置如下:

 

  1.     <filter>
  2.         <filter-name>SetCharacterEncodingFilter</filter-name>
  3.         <filter-class>
  4.             ajax_start.common.SetCharacterEncodingFilter
  5.         </filter-class>
  6.         <init-param>
  7.             <param-name>CommonRequestEncoding</param-name>
  8.             <param-value>gb2312</param-value>
  9.         </init-param>
  10.     </filter>
  11.     <filter-mapping>
  12.         <filter-name>SetCharacterEncodingFilter</filter-name>
  13.         <url-pattern>/*</url-pattern>
  14.     </filter-mapping>

在js里面的处理放方法:

 

  1. function sendReq(queryStr) {
  2.     http_request = false;
  3.     if (window.ActiveXObject) {
  4.         try {
  5.             http_request = new ActiveXObject("Msxml2.XMLHTTP");
  6.         } catch (e) {
  7.             try {
  8.                 http_request = new ActiveXObject("Microsoft.XMLHTTP");
  9.             } catch (e) {
  10.               eventFlag = "true";
  11.             }
  12.         }
  13.     }else if(window.XMLHttpRequest){
  14.         http_request = new XMLHttpRequest();
  15.     }
  16.     if (!http_request) {
  17.         eventFlag = "true";
  18.         window.alert("xmlhttp not supported!");
  19.         return false;
  20.     }
  21.     http_request.onreadystatechange = processReq;
  22.     http_request.open("GET", queryStr, true);
  23.     http_request.setRequestHeader("RequestType","ajax"); //加上header
  24.     inprocess = true;
  25.     http_request.send(null);
  26. }

在action里面需要加上一句:

 

  1. String name = new String(formbean.getName().getBytes("iso8859-1"));

这样ajax的中文请求就能解决了。

 

下面是ajax的中文返回方法,网上有很多如为response加上setHeader或者setCharacterEncoding的方法,但是不太好用,我找到了一个比较简单的方法,在取PrinterWriter的时候使用

 

  1.             PrintWriter writer = new PrintWriter(new OutputStreamWriter(response.getOutputStream(),"utf-8"));

就能简单的完成中文返回的任务了。

 

希望对大家有所帮助,还有什么好的方法欢迎交流。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值