解决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

比亚迪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

 

但是现在问题是中文中还是有极少数乱码,目前还在需求更好的解决办法。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值