簡體   English   中英

如何在android中進行url編碼?

[英]how to url encode in android?

我使用網格視圖使用xml解析顯示圖像,我有一些例外

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

如何解決這個問題呢? 我想顯示所有類型的網址,有人知道請為我提供示例代碼。

謝謝大家

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();
} 

你也可以用它

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

這是最簡單的方法

正如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。

您不對整個URL進行編碼,只來自“不可靠來源”的部分內容進行編碼。

String query = URLEncoder.encode("Hare Krishna ", "utf-8");
String url = "http://stackoverflow.com/search?q=" + query;

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();

你可以使用以下方法

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();
}

我嘗試使用URLEncoder添加(+)登錄替換(“”),但它無法正常工作並且找不到404 url​​錯誤。

然后我用谷歌搜索得到更好的答案,發現這和它的工作真棒。

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類功能。

我最近為此目的編寫了一個快速URI編碼器。 它甚至可以處理unicode字符。 http://www.dmurph.com/2011/01/java-uri-encoder/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM