Android中如何使用Picasso加载含^等特殊字符的图片URL?
解决Picasso无法加载含^符号的URL问题
这个问题我之前也踩过坑!浏览器能正常加载是因为它会自动对URL里的特殊字符做百分比编码,但Picasso默认不会处理这类未编码的特殊字符,所以才会加载失败。下面给你两种靠谱的解决方法:
方法一:手动替换特殊字符
如果你的URL里只有^这一个特殊字符,直接手动替换成它的编码%5E就可以了,简单高效:
String originalUrl = "http://client.codesture.com/ola/images/1521636894^1521636985218.jpg"; // 把^替换为对应的URL编码%5E String encodedUrl = originalUrl.replace("^", "%5E"); // 用编码后的URL加载图片 Picasso.get().load(encodedUrl).into(yourImageView);
方法二:通用URL编码处理(推荐)
如果URL里可能还有其他特殊字符(比如&、=、空格之类的),用Android自带的URLEncoder工具类来处理更稳妥,注意要避开协议(http://)和域名部分,只编码路径:
try { String originalUrl = "http://client.codesture.com/ola/images/1521636894^1521636985218.jpg"; URL urlObj = new URL(originalUrl); // 只编码路径部分,同时修正URLEncoder的默认行为 String encodedPath = URLEncoder.encode(urlObj.getPath(), "UTF-8") .replace("+", "%20") // URLEncoder会把空格转成+,URL标准里应该用%20 .replace("%2F", "/"); // 保留路径分隔符/,不要编码它 // 拼接回完整的编码后URL String encodedUrl = urlObj.getProtocol() + "://" + urlObj.getHost() + encodedPath; Picasso.get().load(encodedUrl).into(yourImageView); } catch (UnsupportedEncodingException | MalformedURLException e) { e.printStackTrace(); }
额外建议
最好能和后端同学沟通下,让他们返回已经编码好的URL,这样前端就不用额外处理,也能避免其他潜在的URL特殊字符问题。
内容的提问来源于stack exchange,提问作者Ritu Rajan
相关产品推荐
相关产品推荐

