ajax技术,获得数据乱码问题

在网上好多提到ajax技术获得数据乱码问题。

我这里有一个解决方案,

针对原有的编码是gbk或gb2312的页面。

这时如从服务器的一个servlet数据,用以下代码来接收。

var messag=XMLHttpReq.responseText;

alert(messag);

 此时,有可能显示为乱码,

针对这个问题解决如下:

在服务器端将需要的数据进行如下编码,即utf-8编码,然后用以下代码来解码

     var messag=XMLHttpReq.responseText;
      var message=unescape(messag);

   aler(message);

   这时就不会有乱码了。

java 代码
  1. package com.test;   
  2.   
  3. public class  EscapeUnescape   
  4. {   
  5.  public static String  escape (String src)   
  6.  {   
  7.      int i;   
  8.      char j;   
  9.      StringBuffer tmp = new StringBuffer();   
  10.      tmp.ensureCapacity(src.length() * 6);   
  11.   
  12.      for (i = 0; i < src.length(); i++) {   
  13.          j = src.charAt(i);   
  14.          if (Character.isDigit(j) || Character.isLowerCase(j) ||   
  15.              Character.isUpperCase(j))   
  16.              tmp.append(j);   
  17.          else {   
  18.              if (j < 256) {   
  19.                  tmp.append("%");   
  20.                  if (j < 16)   
  21.                      tmp.append("0");   
  22.                  tmp.append(Integer.toString(j, 16));   
  23.              } else {   
  24.                  tmp.append("%u");   
  25.                  tmp.append(Integer.toString(j, 16));   
  26.              }   
  27.          }   
  28.      }   
  29.      return tmp.toString();   
  30.  }   
  31.   
  32.  public static String  unescape (String src)   
  33.  {   
  34.      StringBuffer tmp = new StringBuffer();   
  35.      tmp.ensureCapacity(src.length());   
  36.      int lastPos = 0, pos = 0;   
  37.      char ch;   
  38.      while (lastPos < src.length()) {   
  39.          pos = src.indexOf("%", lastPos);   
  40.          if (pos == lastPos) {   
  41.              if (src.charAt(pos + 1) == 'u') {   
  42.                  ch = (char) Integer.parseInt(src.substring(pos + 2, pos + 6),   
  43.                                               16);   
  44.                  tmp.append(ch);   
  45.                  lastPos = pos + 6;   
  46.              } else {   
  47.                  ch = (char) Integer.parseInt(src.substring(pos + 1, pos + 3),16);   
  48.                  tmp.append(ch);   
  49.                  lastPos = pos + 3;   
  50.              }   
  51.          } else {   
  52.              if (pos == -1) {   
  53.                  tmp.append(src.substring(lastPos));   
  54.                  lastPos = src.length();   
  55.              } else {   
  56.                  tmp.append(src.substring(lastPos, pos));   
  57.                  lastPos = pos;   
  58.              }   
  59.          }   
  60.      }   
  61.      return tmp.toString();   
  62.  }   
  63.     
  64. }   

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值