使用汉字从URL获取图像

Joris Schellekens:

我想从远程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:见。香港

我究竟做错了什么?

乔恩·赖利(Jon Reilly):

仅对网址的宿主部分进行编码,并确保您使用的是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

请注意,如果URI的资源部分包含空格之类的字符,则可能需要对其进行URLEncode。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章