使用汉字从URL获取图像

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用汉字从URL获取图像相关的知识,希望对你有一定的参考价值。

我想从远程URL获取图像。

String url =  "http://見.香港/images/wonton.jpg";
String url2 = IDN.toUnicode(url);
BufferedImage bi = ImageIO.read(new URL(url2));
System.out.println(bi);

此代码始终失败

javax.imageio.IIOException:无法从URL获取输入流! 引起:java.net.UnknownHostException:见。香港

我究竟做错了什么?

答案

只编码URL的主机部分,并确保使用IDN.toASCII()而不是IDN.toUnicode()

String fullUrl = "http://見.香港/images/wonton.jpg";
URL url = new URL(fullUrl);

url.getProtocol(); // "http"
url.getHost(); // "見.香港"
url.getPath(); // "/images/wonton.jpg"

String asciiHost = IDN.toASCII(url.getHost());
String validUrl = url.getProtocol() + "://" + asciiHost + url.getPath();
System.out.println(validUrl);
BufferedImage bi = ImageIO.read(new URL(validUrl));

控制台输出:http://xn--nw2a.xn--j6w193g/images/wonton.jpg

请注意,如果要包含空格等字符,则可能需要URLEncode URI的资源部分。

以上是关于使用汉字从URL获取图像的主要内容,如果未能解决你的问题,请参考以下文章

从图库中获取图像以在片段中的图像视图中设置? [复制]

如何从URL获取片段标识符(hash#之后的值)?

从 URL 获取片段(哈希“#”后的值)[关闭]

如何使用 Java 从 html 代码中获取图像 URL [重复]

如何从 URL 获取片段标识符(哈希 # 后的值)?

使用 file_get_contents 从 url 获取图像