我正在尝试从包含如下字符的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可以处理类似于Punycodehttp://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

10-05 23:27