Uri 中文乱码问题

来源:互联网 发布:宏晶单片机 编辑:程序博客网 时间:2024/05/29 13:35

没事用了下Uri.fromFile(new File("/aaa/白板.pdf")).toString()  结果却不是我要的,2个中文字 白板竟然成了百分号了。。无语,百度下找了下列子

我自己偷懒了,我去,我反正是保存这个路径的,我直接在 路径前加了个  file:/// 完事,也不用Uri了。。敲打


下边是搜到的文章:http://blog.chinaunix.net/uid-21144244-id-446383.html

不过感觉对我不没啥用,我是android的。。

我先提及个问题:(具体什么原因 没有深入 就把解决方法给贴出来)  主要是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 (= 0; i < src.length(); i++) {
  j = src.charAt(i);
  if (Character.isDigit(j) || Character.isLowerCase(j)
  || Character.isUpperCase(j))
  tmp.append(j);
  else if (< 256) {
  tmp.append("%");
  if (< 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");前台就可以得到正确的中文 而不是 乱码拉

 


0 0
原创粉丝点击