最近遇到一个问题,就是在URL中若是有特殊的非ASCII字符的话,访问会失败。
因为是是特殊字符首先想到的事用统一编码,用UTF-8转码。
这就又会遇到另一个问题,就是在URL里的 “/” 和“//” 不能被转码,不然还是会出错,无法访问网页。
然这种问题肯定会有解决办法的,我这里有一个办法,特意记录下来以便以后查阅,也为其他的小伙伴遇到同样的问题时能有解决问题的启发。
接下来我们直接看问题:
如果你想访问网站:http://www.abcd.com/aaaa/bbbb/cccc/caffѐ/
如果你想知道 “ѐ” 的utf-8 的编码,可以直接替换掉。可是如果是其他的特殊字符呢?
不妨试试这个:
public class TestUrlConnection {结果是 保护好 “/” 和 “//” 后用UTF-8转码即可直接使用URL了,不信你可以试试……
public static void main(String args[]) {
int count=0;
try {
String Surl = "/aaaa/bbbb/cccc/caffѐ/"; //隔开http:// 分成2个部分
System.out.println(Surl);
SUrl = URLEncoder.encode(Surl.replace("/"," "), "utf-8"); // 保护好 “/”
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);
}
}
欢迎讨论。。。