解决 uri 中文问题

解决 uri 中文问题
我先提及个问题:(具体什么原因 没有深入 就把解决方法给贴出来)  主要是JAVA和前台的交互
  第一:我从uri传递中文到 java后台 出现乱码
  第二:我从uri传递的特殊字符到后台 结果是空白字符
  第三:我从uri中既传入了中文 也传输了 特殊字符
  第三:AJAX从JAVA后台到 前台出现乱码
 
下面我们一一来介绍:
 
    第一种情况:
      包括有两种解决方案:
         第一种方案:在JAVA后台通过  new String("".getbytes("iso8859-1"),'GBK');来解决
        第二种方案:通过前台的两次escape 然后 后台 我引用人家写的一个类
      
 
       
public class EscapeUnescape {
  public static String escape(String src) {
  int i;
  char j;
  StringBuffer tmp = new StringBuffer();
  tmp.ensureCapacity(src.length() * 6);
  for (i = 0; i < src.length(); i++) {
  j = src.charAt(i);
  if (Character.isDigit(j) || Character.isLowerCase(j)
  || Character.isUpperCase(j))
  tmp.append(j);
  else if (j < 256) {
  tmp.append("%");
  if (j < 16)
  tmp.append("0");
  tmp.append(Integer.toString(j, 16));
  } else {
  tmp.append("%u");
  tmp.append(Integer.toString(j, 16));
  }
  }
  return tmp.toString();
  }
  public static String unescape(String src) {
  StringBuffer tmp = new StringBuffer();
  tmp.ensureCapacity(src.length());
  int lastPos = 0, pos = 0;
  char ch;
  while (lastPos < src.length()) {
  pos = src.indexOf("%", lastPos);
  if (pos == lastPos) {
  if (src.charAt(pos + 1) == 'u') {
  ch = (char) Integer.parseInt(src
  .substring(pos + 2, pos + 6), 16);
  tmp.append(ch);
  lastPos = pos + 6;
  } else {
  ch = (char) Integer.parseInt(src
  .substring(pos + 1, pos + 3), 16);
  tmp.append(ch);
  lastPos = pos + 3;
  }
  } else {
  if (pos == -1) {
  tmp.append(src.substring(lastPos));
  lastPos = src.length();
  } else {
  tmp.append(src.substring(lastPos, pos));
  lastPos = pos;
  }
  }
  }
  return tmp.toString();
  }
  public static void main(String[] args) {
  String tmp = "中文";
  System.out.println("testing escape : " + tmp);
  tmp = escape(tmp);
  System.out.println(tmp);
  System.out.println("testing unescape :" + tmp);
  System.out.println(unescape("%u6211%u4eec"));
  }
  }
 
    然后用整个对它进行解码
第二种情况:
          前台JS 通过encodeURIComponent()  进行一个编码 然后 后台 就可以得到 正确的特殊字符 而不是空白 eg:
"/Graduation/viewjob.do?method=all&type="+type+"&like="+encodeURIComponent(document.all.like.value)+"&time="+document.all.time.value
第三中情况:
          既有中文也有特殊字符
        "/Graduation/viewjob.do?method=all&type="+type+"&like="+encodeURIComponent(escape(document.all.like.value))+"&time="+document.all.time.value
     后台就利用上面的类 进行一次 unescape就可以拉
第四种情况:
           因为AJAX 传递通过UTF-8 所以从JAVA代码出去的时候 设置response.setCharacter("UTF-8");前台就可以得到正确的中文 而不是 乱码拉
 

你可能感兴趣的:(职场,uri,休闲)