【问题标题】:Bad URL encoding for images图片的错误 URL 编码
【发布时间】:2012-11-10 17:03:58
【问题描述】:

在我的应用中,有一个 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;

这仅适用于包含数字或英文字母的 URL,不适用于任何其他字符(如空格):

好网址:http://site.com/images/image.png

错误的网址: http://site.com/images/image1.png

我尝试更改 URL 编码 (URLEncoder.encode),但它会更改整个 URL(包括斜杠等...)。

编码后是否需要替换一些字符?还是有更好的方法?

谢谢:)

【问题讨论】:

    标签: java android url-encoding


    【解决方案1】:

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

    【讨论】:

    • 谢谢! :) 但还有一个小问题:它不适用于希伯来字符。我该怎么办?
    • 我认为您需要使用 URLEncoder 显式编码希伯来字符部分。似乎 URI 只处理了几个非 ASCII 字符,请查看 here 中的“编码和解码 URI 组件”部分并查看此 link
    • 您使用的是 URL 还是 IRI(国际化资源标识符)?
    • 里面有希伯来字符 (site.com/images/עברית.png),所以它是 IRI,不是吗?我现在有点迷茫……
    • 它是一个 IRI,所以你需要关注这个link。在android doc 中也提到:URI 的主机、端口和方案不符合编码条件,并且不得包含非法字符。因此,在构建 URI 之前,先将希伯来语部分编码。
    猜你喜欢
    • 2013-01-11
    • 1970-01-01
    • 2017-10-28
    • 2018-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多