仅对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
请注意,如果URI的资源部分包含空格等字符,则可能需要对其进行URL编码。