我正在尝试从主机中包含字符'ü'的URI解析主机,如下所示:
String host = new java.net.URI("http://füllmethodentafel.de").getHost();
但是,主机将为null。它适用于其他URI。任何想法为什么它不起作用?
答案 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}}