我正在尝试从包含如下字符的URI的主机中解析主机:
String host = new java.net.URI("http://füllmethodentafel.de").getHost();
但是,主机将为空。它与其他URI一起使用。任何想法为什么不起作用?
最佳答案
java.net.URI
只能解析符合RFC 2396的URL。该RFC要求以下规则:
hostport = host [ ":" port ]
host = hostname | IPv4address
hostname = *( domainlabel "." ) toplabel [ "." ]
domainlabel = alphanum | alphanum *( alphanum | "-" ) alphanum
toplabel = alpha | alpha *( alphanum | "-" ) alphanum
其中
alphanum
基本上是[a-zA-Z0-9]
。 不包括像ü
这样的字符。 URI
可以处理类似于Punycode
的http://www.xn--hostwith-e6a.com/
之类的 http://www.hostwithü.com/
URL。为此, java.net.IDN
是有用的。String host = "www.hostwithü.com";
String toASCII = IDN.toASCII(host);
System.out.println(toASCII);
// www.xn--hostwith-e6a.com