如何将其中包含空格的网址转换为java中的有效网址?

时间:2014-02-11 17:26:53

标签: java url

我有一个包含空格的链接,但是当我将其粘贴到浏览器时,它会加载页面并且链接稍有变化,这里是链接:

http://www.marketimyilmazlar.com/image/cache/data/DUZELTME/dvm/screenshot 7-500x500.jpg

但是当浏览器隐藏页面时它会返回到以下内容:

http://www.marketimyilmazlar.com/image/cache/data/DUZELTME/dvm/screenshot%207-500x500.jpg

这是我在java中所做的:

 public static Drawable LoadImageFromWeb(String link) throws URISyntaxException {
    try {
        URI uri = new URI(link);
        URL url = new URL(uri.toASCIIString());
        InputStream is = (InputStream) url.getContent();
        Drawable d = Drawable.createFromStream(is, "src name");
        return d;
    } catch (IOException e) {
        Log.e("HATA", "THERE is an error", e);
        return null;
    }
}

但问题是,我得到以下例外:

java.net.URISyntaxException: Illegal character in path at index 73:

那么,任何人都可以帮助我吗?感谢

3 个答案:

答案 0 :(得分:3)

java.net.URI类可以在这里帮助你 - 它的单个参数构造函数期望参数是一个带有非法字符转义的正确URI,但是它的多参数构造函数可以处理未转义的部分。如果您的初始网址已经不包含任何%-escapes,并且最后没有#片段,那么您可以

String escaped = new URI("dummy", unescaped, null).getRawSchemeSpecificPart();

这里的技巧是三参数构造函数需要一个“方案”,一个“方案特定部分”和一个“片段”,所有这些都是未转义的形式。所以对于你在问题中的例子

new URI("dummy", unescaped, null)

会为您提供正确转义的URI

dummy:http://www.marketimyilmazlar.com/image/cache/data/DUZELTME/dvm/screenshot%207-500x500.jpg

从该URI中提取原始SSP将为您提供第一次冒号后的所有内容,即

http://www.marketimyilmazlar.com/image/cache/data/DUZELTME/dvm/screenshot%207-500x500.jpg

答案 1 :(得分:1)

使用Java标准库进行正确的URL解析远非微不足道。在遇到边缘情况时我变得沮丧。所以我在Java中开发了一个用于正确URL解析的库:galimatias。在Web浏览器中工作的任何URL都应该与galimatias一起使用。

使用io.mola.galimatias.URL.parse(link),您会获得io.mola.galimatias.URL个对象。在这里解析几乎可以用于任何你抛出的东西(除非它真的可以被解释为URL)。然后,您可以使用toJavaURL()将其转换为Java URL。

对于您的用例,您可以写:

 public static Drawable LoadImageFromWeb(String link) {
     try {
         URL url = io.mola.galimatias.URL.parse(link).toJavaURL();
         InputStream is = (InputStream) url.getContent();
         Drawable d = Drawable.createFromStream(is, "src name");
         return d;
     } catch (IOException e) {
         Log.e("HATA", "THERE is an error", e);
         return null;
     } catch (GalimatiasParseError e) {
         Log.e("HATA", "THERE is an error", e);
         return null;
     } catch (MalformedURLException e) {
         Log.e("HATA", "THERE is an error", e);
         return null;
     }
 }

答案 2 :(得分:-2)

必须对网址进行编码,并Java has an object for that。在字符串上使用URLEncode.encode()