在包含变音符号的Java中解析URI的主机

时间:2014-08-07 13:08:48

标签: java uri

我正在尝试从主机中包含字符'ü'的URI解析主机,如下所示:

String host = new java.net.URI("http://füllmethodentafel.de").getHost();

但是,主机将为null。它适用于其他URI。任何想法为什么它不起作用?

1 个答案:

答案 0 :(得分:5)

java.net.URI只能解析符合RFC 2396的网址。此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 可以处理http://www.xn--hostwith-e6a.com/http://www.hostwithü.com/的网址,相当于String host = "www.hostwithü.com"; String toASCII = IDN.toASCII(host); System.out.println(toASCII); // www.xn--hostwith-e6a.com 。为此,Punycode很有用。

{{1}}