工作记录——UrlDecode

  Url编码大家都会遇到,一般语言也都会有默认的Url编码解码的内置函数方法等。但是Url编码的一大问题也就是字符集!看到的思路大致是,从http请求里找charset……可是,咱这需求是直接给你一个编码过的Url,要你给解出来!

      3G%E6%97%A0%E7%BA%BFVPN%E5%8F%8C%E5%8D%A1%E7%BB%91%E5%AE%9A%E8%B7 

  有些纳闷,当然,手工的去用UTF8和GBK试一下就知道了,可以如何让程序知道,编码没有错误呢!想法当然很明确,只能靠猜!

  既然猜,那就要了解一下关于字符编码的知识了……

  这里请自行去科普吧=w=

  

  /**
* 判断字符串的字符集
* @param strBytes 输入的字符串字节流
* @return 返回字符集名称
*/
public static String getCharset(byte[] strBytes){
String charset
= "unknown"; //默认非UTF8和GB2312
for (int i = 0; i < strBytes.length; i++) {
System.out.println(strBytes[i]);
if (strBytes[i] < 128 && strBytes[i] >= 0)
continue;//在ASCii码范围内的就不用判断了,直接判断后面的字符
if ((strBytes[i]&224) == 224 ) {// UTF8的识别
System.out.println(strBytes[i]);
if ((strBytes[i+1]&128) == 128)
if ((strBytes[i+2]&128) == 128){
charset
= "UTF8";
break;
}
}
if ((strBytes[i]&192) == 192) {// GBK的识别
System.out.println(strBytes[i+1]);
if ((strBytes[i+1]&128) == 128){
charset
= "GB2312";
break;
}
}
}
return charset;

  试了下,效果还可以的说=w=

  哦,正体还没说,对于一串未知的经过URLEndcode过的字串,先用"iso-8859-1"去decode,然后再上面的方法判断到底是何种字符集,再对原字串用该字符集进行UrlDecode就可以啦~

posted @ 2011-09-16 15:37  奋斗的念小念  阅读(349)  评论(0)    收藏  举报