Android 从空间对图像URL进行编码

Android 从空间对图像URL进行编码,android,url,encoding,bitmap,special-characters,Android,Url,Encoding,Bitmap,Special Characters,我正在开发一个RSS阅读器应用程序,但我面临图像URL的问题,因为它们包含空格。我在这些论坛上尝试了几种技巧,但它们都给了我不同的错误。我尝试将空间替换为%20,但发现文件未找到异常。 这是我获取图像的方法: //String ALLOWED_URI_CHARS = "@#&=*+-_.,:!?()/~'%"; //url = Uri.encode(url, ALLOWED_URI_CHARS); //URL urlnew = new UR

我正在开发一个RSS阅读器应用程序,但我面临图像URL的问题,因为它们包含空格。我在这些论坛上尝试了几种技巧,但它们都给了我不同的错误。我尝试将空间替换为%20,但发现文件未找到异常。 这是我获取图像的方法:

//String ALLOWED_URI_CHARS = "@#&=*+-_.,:!?()/~'%";
            //url = Uri.encode(url, ALLOWED_URI_CHARS);
            //URL urlnew = new URL(url);
            //URI uri = new URI(urlnew.getProtocol(), urlnew.getUserInfo(), urlnew.getHost(), urlnew.getPort(), urlnew.getPath(), urlnew.getQuery(), urlnew.getRef());
            //urlnew = uri.toURL();
            //url = URLEncoder.encode(url.replace(" ", "%20"), "utf-8");
            url = url.replaceAll(" ", "%20");

            Bitmap bitmap=null;
            URL imageUrl = new URL(url);
            HttpURLConnection conn = (HttpURLConnection)imageUrl.openConnection();
            conn.setDoInput(true);
            conn.setDoOutput(true);
            conn.setRequestMethod("GET");
            Log.i("Code:",conn.getResponseCode()+" "+conn.getResponseMessage());
            Log.i("Error Message",conn.getErrorStream()+"");
            conn.setConnectTimeout(30000);
            conn.setReadTimeout(30000);
            conn.setInstanceFollowRedirects(true);
            InputStream is=conn.getInputStream();
            OutputStream os = new FileOutputStream(f);
            Utils.CopyStream(is, os);
            os.close();
            conn.disconnect();
            bitmap = decodeFile(f);
            return bitmap;
顶部的注释命令是我从其他人那里得到的一些命令。 日志:

如果我将包含%20的编码URL插入浏览器,图像将正常打开,以便链接正常工作。

删除两个:

conn.setDoInput(true);
conn.setDoOutput(true);
希望这可以解决问题。

同时删除以下两项:

conn.setDoInput(true);
conn.setDoOutput(true);
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();
希望这能解决问题

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();
相关的:

相关:

试试这个技巧

String query = URLEncoder.encode("apples oranges", "utf-8");
String url = "http://stackoverflow.com/search?q=" + query;
或者使用类似

String uri = Uri.parse("http://...")
                .buildUpon()
                .appendQueryParameter("key", "val")
                .build().toString();
试试这个技巧

String query = URLEncoder.encode("apples oranges", "utf-8");
String url = "http://stackoverflow.com/search?q=" + query;
或者使用类似

String uri = Uri.parse("http://...")
                .buildUpon()
                .appendQueryParameter("key", "val")
                .build().toString();

你为什么不使用+而不是%20?你在清单文件中添加了Internet权限了吗?@rciovati:我试过了,它给了我同样的错误(FileNotFoundException)@GodoFadroid:当然可以。你为什么不使用+而不是%20?你在清单文件中添加了Internet权限了吗?@rciovati:我试过了,它给了我同样的错误(FileNotFoundException)@Godofadroid:当然了。删除了它,仍然是相同的异常:/尝试了,我仍然得到了相同的异常。如果链接不包含空格,那么代码就可以完美地工作。但问题是它们确实如此。试试这个:String url=“”;url=url.replaceAll(“,“%20”);尝试{url=URLEncoder.encode(url,“utf-8”);}catch(UnsupportedEncodingException e){//TODO自动生成的catch块e.printStackTrace();}我实际上将您的答案与“PsyGik”答案合并以使其工作,如果不删除您告诉我要删除的命令,他的方法就无法工作:)删除了它仍然是相同的异常:/。如果链接不包含空格,那么代码就可以完美地工作。但问题是它们确实如此。试试这个:String url=“”;url=url.replaceAll(“,“%20”);尝试{url=URLEncoder.encode(url,“utf-8”);}catch(UnsupportedEncodingException e){//TODO自动生成的catch块e.printStackTrace();}我实际上将您的答案与“PsyGik”答案合并以使其工作,如果不删除您告诉我删除的命令,他的方法就无法工作:)非常感谢!它工作得很好,尽管正如您从上面的代码中看到的,我以前尝试过它,但它不起作用,但我删除了conn.setDoInput(true);连接设置输出(真);然后它成功了。非常感谢!它工作得很好,尽管正如您从上面的代码中看到的,我以前尝试过它,但它不起作用,但我删除了conn.setDoInput(true);连接设置输出(真);然后它成功了。