17

我正在使用网格视图使用 xml 解析来显示图像,我遇到了一些异常,例如

java.lang.IllegalArgumentException:索引 80 处路径中的非法字符: http ://www.theblacksheeponline.com/party_img/thumbspps/912big_361999096_Flicking Off Douchebag.jpg

如何解决这个问题呢?我想显示所有类型的网址,任何人都知道请给我示例代码。

谢谢大家

4

8 回答 8

29

URL 编码在 android 上的完成方式与在 Java SE 中相同;

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();
} 
于 2010-09-17T11:30:39.460 回答
15

你也可以使用这个

private static final String ALLOWED_URI_CHARS = "@#&=*+-_.,:!?()/~'%";
String urlEncoded = Uri.encode(path, ALLOWED_URI_CHARS);

这是最简单的方法

于 2014-01-24T12:01:55.760 回答
6

正如 Ben 在他的评论中所说,您不应将 URLEncoder.encode 用于完整的 URL,因为您将根据W3C中的以下示例更改 URL 的语义:

URI http://www.w3.org/albert/bertram/marie-claudehttp://www.w3.org/albert/bertram%2Fmarie-claude 不相同,因为在第二种情况下,编码的斜杠确实如此没有等级意义。

相反,您应该根据 RFC 3986第 2.4 节中的以下内容独立编码 URL 的组成部分

在正常情况下,URI 中的八位字节被百分比编码的唯一时间是在从其组成部分生成 URI 的过程中。这是当实现确定哪些保留字符将用作子组件分隔符以及哪些可以安全地用作数据时。生成后,URI 始终采用百分比编码形式。

因此,简而言之,对于您的情况,您应该对文件名进行编码/转义,然后组合 URL。

于 2011-03-08T22:26:28.610 回答
4

您不对整个 URL进行编码,仅对来自“不可靠来源”之类的部分进行编码。

String query = URLEncoder.encode("Hare Krishna ", "utf-8");
String url = "http://stackoverflow.com/search?q=" + query;
于 2015-12-25T06:15:14.623 回答
1

URLEncoder 应该只用于编码查询,使用java.net.URI类代替:

URI URI = 新的 URI(
    "http",
    "www.theblacksheeponline.com",
    "/party_img/thumbspps/912big_361999096_Flicking Off Douchebag.jpg",
    无效的);
字符串请求 = uri.toASCIIString();
于 2012-04-07T18:50:50.967 回答
1

您可以使用以下方法

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();
}
于 2016-06-18T06:30:51.373 回答
1

我尝试使用添加 (+) 符号替换 (" ") 的 URLEncoder,但它不起作用并且出现 404 url​​ not found 错误。

然后我用谷歌搜索以获得更好的答案,发现这个和它的工作很棒。

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 类特性。

于 2019-02-05T06:02:05.277 回答
0

我最近为此编写了一个快速 URI 编码器。它甚至可以处理 unicode 字符。 http://www.dmurph.com/2011/01/java-uri-encoder/

于 2011-08-04T18:03:23.287 回答