将字符串解析为URL

| 如何解析动态字符串值以创建URL实例?我需要用
%20
,重音符号,非ASCII字符替换空格吗? 我尝试使用
URLEncoder
,但它也编码了
/
字符,如果我将用constructor1 give编码的字符串提供给URL构造函数,则会得到
MalformedURLException
(无协议)。     
已邀请:
        
URLEncoder
的名字极具误导性。它是根据所使用的Javadocs使用MIME类型“ 6”对表单参数进行编码的。 有了这个说法,它可以用于编码查询参数。例如,如果参数看起来像“ 7”,则其编码等效项可以用作:
String url = \"http://host.com/?key=\" + URLEncoder.encode(\"&/?#\");
除非您有特殊需要,否则javadocs建议使用URL“ 9”,该URL根据RFC2396执行URI编码。   建议的管理URL编码和解码的方法是使用URI 以下样本
new URI(\"http\", \"host.com\", \"/path/\", \"key=| ?/#ä\", \"fragment\").toURL();
产生结果ѭ11。请注意如何对诸如“ 12”之类的字符不进行编码。 有关更多信息,请参阅Java中的HTTP URL地址编码或如何对URL进行编码以避免在Java中使用特殊字符。 编辑 由于您输入的是字符串URL,因此使用
URI
的参数化构造函数之一将无济于事。您也不能直接使用“ 14”,因为它没有引用URL参数。 因此,在此阶段,我们必须使用技巧来获取您想要的东西:
public URL parseUrl(String s) throws Exception {
     URL u = new URL(s);
     return new URI(
            u.getProtocol(), 
            u.getAuthority(), 
            u.getPath(),
            u.getQuery(), 
            u.getRef()).
            toURL();
}
在使用此例程之前,必须清理字符串以确保它表示绝对URL。我看到两种方法: 猜猜除非字符串已存在,否则在字符串前加
http://
。 使用
new URL(URL context, String spec)
从上下文构造URI     
        因此,您要说的是要对URL的一部分进行编码,而不是整个内容。在我看来,您必须将其分解为多个部分,将要编码的部分传递给编码器,然后重新组装以获得完整的URL。     

要回复问题请先登录注册