2012-11-10 138 views
1

在我的應用中,有一個ImageView顯示來自URL的圖片。圖片的網址編碼不正確

 Bitmap bitmap=null; 
     URL imageUrl = new URL(url); 
     HttpURLConnection conn = (HttpURLConnection)imageUrl.openConnection(); 
     conn.setConnectTimeout(30000); 
     conn.setReadTimeout(30000); 
     conn.setInstanceFollowRedirects(true); 
     InputStream is=conn.getInputStream(); 
     OutputStream os = new FileOutputStream(f); 
     Utils.CopyStream(is, os); 
     os.close(); 
     bitmap = decodeFile(f); 
     return bitmap; 

這僅適用於網址,有數字或英文字母,並且不與任何其他字符的工作(如空格):

我用這個方法下載圖像網址:http://site.com/images/image.png

不良網址:http://site.com/images/image 1.png

我試圖chage URL編碼(URLEncoder.encode),但它改變了整個URL(斜槓等)。

編碼後需要替換一些字符嗎?或者有更好的辦法?

謝謝:)

回答

3

Url encoding in Android

你不編碼整個URL,只有來自 「不可靠消息人士」 的這部分。 -yanchenko

String query = URLEncoder.encode("apples oranges", "utf-8"); 
String url = "https://stackoverflow.com/search?q=" + query; 

這是好的,如果你只是處理一個URL的特定部分和 你知道如何構建或重建的URL。對於可以處理任何url字符串的更通用的 方法,請參閱下面的答案。 - 克雷格 乙

String urlStr = "http://abc.dev.domain.com/0007AC/ads/800x480 15sec h.264.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(); 
+0

謝謝! :)但仍然有一點問題:它不適用於希伯來語字符。我該怎麼辦? – eviabs

+0

我認爲你需要使用URLEncoder明確地對希伯來字符部分進行編碼。似乎只有少數非ASCII字符被URI所關注,請查看[here](http://developer.android.com/reference/java/net/URLEncoder.html)中的「Encoding and Decoding URI Components」部分,並檢查這[鏈接](http://stackoverflow.com/a/2744184/909271) – 1O1

+0

你使用的是URL還是IRI(國際化資源標識符)? – 1O1