我有一个包含空格的链接,但是当我将其粘贴到浏览器时,它会加载页面并且链接稍有变化,这里是链接:
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:
那么,任何人都可以帮助我吗?感谢
答案 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()
。