解决url编码问题
url中包含中文一般需要编码,而在编解码中由于浏览器或者个人系统编码的原因,可能会有不同的编码访问形式,因此在解码的时候需要注意,不然很容易出现乱码。在最近工作中遇到了这个问题,虽然没有完全解决乱码,但依据次方式能够解决大部分此类问题。
例: url="%25b1%25a6%25c2%25ed1%25cf%25b5%25b3%25a8%25c5%25f1" 我们在解码时用到
String b1 = URLDecoder.decode(url);String encode = FileUtil.getEncoding(b1); //获得b1的编码方式String b2= URLDecoder.decode(b1, encode); //再用b1的编码方式对b1再进行解码得到b2 String b2Encode = FileUtil.getEncoding(b2);//获得b2的编码方式if (!encode.equals(b2Encode)) {b2 = URLDecoder.decode(b1, b2Encode);}//如果第二次编码方式和第一不同,那么再对b1按b2编码再解码。这样就保证了在不知道该字符串编码方式的时候进行解码,那么getEncoding()是怎么做到的呢??再看看下面getEncoding方法的具体实现public static String getEncoding(String str) {
String encode = "GB2312"; try { if (str.equals(new String(str.getBytes(encode), encode))) { String s = encode; return s; } } catch (Exception exception) { } encode = "ISO-8859-1"; try { if (str.equals(new String(str.getBytes(encode), encode))) { String s1 = encode; return s1; } } catch (Exception exception1) { } encode = "UTF-8"; try { if (str.equals(new String(str.getBytes(encode), encode))) { String s2 = encode; return s2; } } catch (Exception exception2) { } encode = "GBK"; try { if (str.equals(new String(str.getBytes(encode), encode))) { String s3 = encode; return s3; } } catch (Exception exception3) { } return ""; }
?其实就是按编码方式一个个的新建字符串,然后和新建串以前做比较,如果相同则认为是该编码方式。
?
标致308配置2
比亚迪f3dm2
猎豹奇兵报价2
现代飞思veloster2
甲壳虫敞篷汽车报价2
花冠 2
英菲尼迪g2
览胜2
起亚凯尊2
长安汽车悦翔2
陆虎揽胜2
雪佛兰科迈罗报价2
雪弗兰景程2
雪铁龙c62
风行景逸suv怎么样2
马自达2劲翔2
????h??2
11款卡罗拉1
12款新宝来报价1
?
但是现在问题是中文中还是有极少数乱码,目前还在需求更好的解决办法。。