下载图片的URL包含“è”

5

我试图下载以下URL中的图像:

http://upload.tapcrowd.com//cache//_cp_100_100_stand_filière_300x212.jpg

正如您在浏览器中所看到的,这显示了一张图片,但在我的应用程序中,我得到了FileNotFoundException。

然而,如果我将图像的url从“è”更改为“e”,我就可以成功地将其下载到我的应用程序中。然而,这只是一个临时解决方案,因为它需要能够下载带有Unicode符号的图像。

我该如何实现这个目标?

用于下载图像的方法:

        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, maxheight, maxwidth);

适用于我的结果代码:

        Bitmap bitmap = null;
        int slashIndex = url.lastIndexOf('/');
        String filename = url.substring(slashIndex + 1);
        filename = URLEncoder.encode(filename, "UTF-8");
        url = url.subSequence(0, slashIndex + 1) + filename;
        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, maxheight, maxwidth);

可能是编码问题。您需要对路径进行urlencode(在.com后面的部分)。 - njzk2
我尝试了URLEncoder.encode(url); 但没有成功。 - ePeace
你指定了编码还是使用了已被弃用的仅带一个参数的编码? - ben75
urlencode 应该给你类似于 http://upload.tapcrowd.com//cache//_cp_100_100_stand_fili%C3%A8re_300x212.jpg 的东西。 - njzk2
你能发布与 f 相关的代码吗?你是如何创建它的? - ben75
@njzk2 你是正确的,抱歉,如果您将您的评论发布为答案,我会将其设置为正确答案。 - ePeace
1个回答

3

使用URLEncoder对url进行编码:

String baseUrl = "http://upload.tapcrowd.com//cache//";
String imageName = "_cp_100_100_stand_filière_300x212.jpg";
URL imageUrl = new URL(baseUrl+URLEncoder.encode(imageName ,"UTF-8"));

它与您的浏览器一起工作,因为浏览器足够聪明,在您的URL栏中键入重音时进行编码。


这对我来说解决了问题,但 njzk2 先得到了那个答案,我将把他的答案标记为正确;谢谢。 - ePeace

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接