2010-08-12 61 views
6

我在使用Unicode-URL向servlet发送重定向时遇到问题。将Servlet重定向到Unicode-Domain

即考虑土耳其

http://türkçeisimtescil.com

如果你把它粘贴到浏览器的地址栏中它的工作原理如下网址。但是它是由根据您的要求您的浏览器转换为

http://xn--trkeisimtescil-ijb74a.com

比方说,我有第一个URL与UTF8特定的字符,我从数据库中成功地得到它。我想将我的servlet重定向到该URL。

然而,当我只是做response.sendRedirect(url);(根据头)将其重定向我www.t%1frk%e7eisimtescil.com

我想即使response.sendRedirect("http://www.t\u011Frk\u00E7eisimtescil.com");(内嵌编码)和反应是完全一样的。

也许如果我在头上获得türkçeisimtescil.com,浏览器会将其转换为xn--..格式,并且它会成功。

我找不出编码被破坏的地方。任何帮助表示赞赏。

回答

7

这是一个Internationalized Domain Name(IDN)。其在ASCII and Unicode之间的转换在RFC 3490中指定。在Java中,您可以使用java.net.IDN在一个和另一个之间进行转换。您可以使用java.net.URL从URL中获取主机部分。

String host = new URL("http://türkçeisimtescil.com").getHost(); 
String idn = IDN.toASCII(host); 
String newURL = "http://" + idn; 
+0

已经无论如何发现了。 – 2010-08-12 18:20:21

0

已解决。

IDN类java.net.IDN通过获得“ponycode”(xn-- ..)URLs解决了这个问题。

java.net.IDN.toASCII(url) 

3自应答连续FTW :)

+0

你很快!请注意,您只想转换域(主机)部分。看到我的答案。 – BalusC 2010-08-12 18:21:38

+0

其实我需要整个网址(权限,端口,查询字符串,域)进行转换。当然IDN ponycode只适用于域名。我正在寻找一个方便的解决方案,因为它做了类似xn - http:// ..这是意想不到的(由我)。有任何想法吗? – 2010-08-12 18:57:12

+0

有趣的是,它很好地为'http://A.türkçe'或'http://w.türkçe'生成'http:// xn - ',而为'http:// http:// http: //türkçeblabla...'把我的头发拉出来。 – 2010-08-12 19:00:50