编码问题之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了,不信你可以试试……
欢迎讨论。。。
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。