Java - 如果 src 有连字符,则无法从 Internet 下载图像

Posted

技术标签:

【中文标题】Java - 如果 src 有连字符,则无法从 Internet 下载图像【英文标题】:Java - Can't download image from internet if src has a hyphen 【发布时间】:2017-07-11 18:07:20 【问题描述】:

我有一个程序,它涉及从该图像的 src 从 Internet 下载图像,它在大多数情况下都能完美运行,但是如果图像的 src 在地址中有一个“-”,我会得到一个 IOException。

BufferedImage image = null;
fileName = emailFirst + "_at_" + emailLast + " (" + fullName + ")";

URL url = new URL(imageUrl);
image = ImageIO.read(url);

System.out.println("DIRECTORY: " + directory);
ImageIO.write(image, "jpg", new java.io.File(directory + "\\" + fileName + ".jpg"));

唯一无法正常工作的情况是 url 有连字符,例如“wp-content”中的这个链接

https://www.applicoinc.com/wp-content/uploads/2016/04/Employee_Alex_Moazed.jpg

有什么想法吗?

【问题讨论】:

您可以编辑您的帖子并显示您获得的特定 IO 异常及其堆栈跟踪吗? 使用 URLEncoder 应该可以工作 【参考方案1】:

如果您查看 URL 类的文档,您会看到这一点(强调我的)

URL 类本身不会根据 RFC2396 中定义的转义机制对任何 URL 组件进行编码或解码。调用方有责任对在调用 URL 之前需要转义的任何字段进行编码,并对从 URL 返回的任何转义字段进行解码。

要正确编码,您必须使用您的 URL 字符串初始化 URI ,并调用 toURL 方法来获取编码后的 URL。

【讨论】:

URLEncoder not 用于编码 URL 组件,尽管它的名称。 URLEncoder 用于使用application/x-www-form-urlencoded 对数据进行编码。这两种编码相似但不相同。要正确地对 URL 组件进行百分比编码,请创建一个 URI 并调用其 toURL 方法。 @VGR 你说的很对——我的速度有点太快了。我改变了答案。

以上是关于Java - 如果 src 有连字符,则无法从 Internet 下载图像的主要内容,如果未能解决你的问题,请参考以下文章

Bash 创建一个字符串,如果字符串已经存在,则替换它

如果在具有 Q_OBJECT 宏的类之外,则无法在 Qt Linguist 中获取字符串

如果通过 python selenium 和美丽的汤嵌套在视频内的源标签内,则无法抓取 src

localstorage不刷新无法读取

如果 iframe src 无法加载,则捕获错误。错误:-“拒绝在框架中显示 'http://www.google.co.in/'..”

KMP算法next数组的计算