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就可以啦~