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
比亚迪f3dm 2
猎豹奇兵报价 2
现代飞思veloster 2
甲壳虫敞篷汽车报价 2
花冠 2
英菲尼迪g 2
览胜 2
起亚凯尊 2
长安汽车悦翔 2
陆虎揽胜 2
雪佛兰科迈罗报价 2
雪弗兰景程 2
雪铁龙c6 2
风行景逸suv怎么样 2
马自达2劲翔 2
����h�� 2
11款卡罗拉 1
12款新宝来报价 1
但是现在问题是中文中还是有极少数乱码,目前还在需求更好的解决办法。。