当您选择适当的构造函数时, URI会引发URISyntaxException:
URI someUri=new URI("http","www.christlicheparteiösterreichs.at","/steiermark",null);
java.net.URISyntaxException:索引 28 处主机名中的非法字符:http://www .christlicheparteiösterreichs.at/steiermark
您可以为此使用IDN来修复:
URI someUri=new URI("http",IDN.toASCII("www.christlicheparteiösterreichs.at"),"/steiermark",null);
System.out.println(someUri);
System.out.println("host: "+someUri.getHost()));
输出:
http://www.xn--christlicheparteisterreichs-5yc.at/steiermark
主机:www.xn--christlicheparteisterreichs-5yc.at
关于鸡蛋问题的更新:
您可以让 URL 完成这项工作:
public static URI createSafeURI(final URL someURL) throws URISyntaxException
{
return new URI(someURL.getProtocol(),someURL.getUserInfo(),IDN.toASCII(someURL.getHost()),someURL.getPort(),someURL.getPath(),someURL.getQuery(),someURL.getRef());
}
URI raoul=createSafeURI(new URL("http://www.christlicheparteiösterreichs.at/steiermark/readme.html#important"));
这只是一个速写,它并未检查所有有关将 URL 转换为 URI 的问题。以它为起点。