我使用网格视图使用xml解析显示图像,我有一些例外,如
java.lang.IllegalArgumentException:路径中的非法字符 索引80: http://www.theblacksheeponline.com/party_img/thumbspps/912big_361999096_Flicking 关闭Douchebag.jpg
如何解决这个问题?我想显示所有类型的网址,有人知道请为我提供示例代码。
全部谢谢
答案 0 :(得分:28)
在Android上以与在Java SE中相同的方式完成URL编码;
try {
String url = "http://www.example.com/?id=123&art=abc";
String encodedurl = URLEncoder.encode(url,"UTF-8");
Log.d("TEST", encodedurl);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
答案 1 :(得分:13)
您也可以使用此
private static final String ALLOWED_URI_CHARS = "@#&=*+-_.,:!?()/~'%";
String urlEncoded = Uri.encode(path, ALLOWED_URI_CHARS);
这是最简单的方法
答案 2 :(得分:5)
正如Ben在评论中所说,你不应该将URLEncoder.encode用于完整的URL,因为你将根据W3C中的以下示例更改URL的语义:
URI http://www.w3.org/albert/bertram/marie-claude 和 http://www.w3.org/albert/bertram%2Fmarie-claude 与第二个不同 编码斜杠没有的情况 等级意义。
相反,您应该根据RFC 3986第2.4节
中的以下内容独立编码URL的组成部分一般情况下,唯一的 URI中八位字节的时间 百分比编码是在此过程中 从其生成URI 零部件。这是一个 实现确定了哪个 保留字符用作 子组件分隔符,哪些可以 安全地用作数据。一旦 生成,URI始终在其中 百分比编码形式。
因此,简而言之,对于您的情况,您应该编码/转义您的文件名,然后汇编URL。
答案 3 :(得分:4)
您不会编码整个网址,只会部分来自"不可靠来源"等。
String query = URLEncoder.encode("Hare Krishna ", "utf-8");
String url = "http://stackoverflow.com/search?q=" + query;
答案 4 :(得分:1)
URLEncoder只能用于编码查询,而是使用java.net.URI类:
URI uri = new URI( "http", "www.theblacksheeponline.com", "/party_img/thumbspps/912big_361999096_Flicking Off Douchebag.jpg", null); String request = uri.toASCIIString();
答案 5 :(得分:1)
我尝试使用添加了(+)符号代替(“”)的URLEncoder,但是它无法正常工作,并且出现404 URL not found错误。
然后我在Google上搜索以获得更好的答案,并发现它及其出色的功能。
String urlStr = "http://www.example.com/test/file name.mp4";
URL url = new URL(urlStr);
URI uri = new URI(url.getProtocol(), url.getUserInfo(), url.getHost(), url.getPort(), url.getPath(), url.getQuery(), url.getRef());
url = uri.toURL();
这种对url进行编码的方法非常有用,因为使用URL可以将url分成不同的部分。因此,无需执行任何字符串操作。
然后是第二个URI类,当您通过组件而不是从单个字符串构造URI时,此方法利用了URI类功能,可以正确地对组件进行转义。
答案 6 :(得分:0)
您可以使用以下方法
public String parseURL(String url, Map<String, String> params)
{
Builder builder = Uri.parse(url).buildUpon();
for (String key : params.keySet())
{
builder.appendQueryParameter(key, params.get(key));
}
return builder.build().toString();
}
答案 7 :(得分:-1)
我最近为此目的编写了一个快速URI编码器。它甚至可以处理unicode字符。 http://www.dmurph.com/2011/01/java-uri-encoder/