首页 > 代码库 > 编码问题之URL中特殊字符(?等)

编码问题之URL中特殊字符(?等)

最近遇到一个问题,就是在URL中若是有特殊的非ASCII字符的话,访问会失败。

因为是是特殊字符首先想到的事用统一编码,用UTF-8转码。

这就又会遇到另一个问题,就是在URL里的 “/” 和“//” 不能被转码,不然还是会出错,无法访问网页。

然这种问题肯定会有解决办法的,我这里有一个办法,特意记录下来以便以后查阅,也为其他的小伙伴遇到同样的问题时能有解决问题的启发。

接下来我们直接看问题:

如果你想访问网站:http://www.abcd.com/aaaa/bbbb/cccc/caff?/

如果你想知道 “?” 的utf-8 的编码,可以直接替换掉。可是如果是其他的特殊字符呢?

不妨试试这个:

public class TestUrlConnection {

<span style="font-size:14px;">    public static void main(String args[]) {
        int count=0;
        try {
            String Surl = "/aaaa/bbbb/cccc/caff?/";               //隔开http://   分成2个部分
            System.out.println(Surl);
</span><pre name="code" class="java"><span style="font-size:14px;"><span style="white-space:pre">	</span>    SUrl <span style="font-family: Arial, Helvetica, sans-serif;">= URLEncoder.encode(Surl.replace("/"," "), "utf-8");     // 保护好 “/”</span></span>
System.out.println(Surl); Surl = Surl.replace("+","/");// 空格出现的乱码是"+" 还原"/" System.out.println(Surl);// URL url = new URL(Surl.replace("?","%D1%90")); //直接替换 简单 只是只能针对这一个字符 URL url = new URL("http://www.abcd.com"+Surl); System.out.println(url); BufferedReader br = new BufferedReader(new InputStreamReader(url.openStream())); if(br.readLine()!=null){ count++; } } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } System.out.println(count); }

结果是 保护好 “/” 和 “//” 后用UTF-8转码即可直接使用URL了,不信你可以试试……

欢迎讨论。。。


编码问题之URL中特殊字符(?等)