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

yra*_*lik 1 java url

我有一个链接,其中有一个空格,但是当我将其粘贴到浏览器时,它加载页面并且链接略有变化,以下是链接:

http://www.marketimyilmazlar.com/image/cache/data/DUZELTME/dvm/screenshot 7-500x500.jpg
Run Code Online (Sandbox Code Playgroud)

但是当浏览器加载页面时,它会返回以下内容:

http://www.marketimyilmazlar.com/image/cache/data/DUZELTME/dvm/screenshot%207-500x500.jpg
Run Code Online (Sandbox Code Playgroud)

这是我在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;
    }
}
Run Code Online (Sandbox Code Playgroud)

但问题是,我得到以下异常:

java.net.URISyntaxException: Illegal character in path at index 73:
Run Code Online (Sandbox Code Playgroud)

那么,有人可以帮我解决这个问题吗?谢谢

Ian*_*rts 7

该类java.net.URI可能可以在这里为您提供帮助 - 它的单参数构造函数期望参数是一个正确的 URI,并且转义了非法字符,但它的多参数构造函数可以处理未转义的部分。#如果您的初始 URL 不包含任何 %-转义符,并且末尾没有片段,那么您可以这样做

String escaped = new URI("dummy", unescaped, null).getRawSchemeSpecificPart();
Run Code Online (Sandbox Code Playgroud)

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

new URI("dummy", unescaped, null)
Run Code Online (Sandbox Code Playgroud)

将为您提供正确转义的 URI

String escaped = new URI("dummy", unescaped, null).getRawSchemeSpecificPart();
Run Code Online (Sandbox Code Playgroud)

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

new URI("dummy", unescaped, null)
Run Code Online (Sandbox Code Playgroud)