如何在android中进行url编码?

时间:2010-09-17 11:21:51

标签: android illegalargumentexception

我使用网格视图使用xml解析显示图像,我有一些例外,如

  

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

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

全部谢谢

8 个答案:

答案 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/