[英]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-claude和http://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.