将Servlet重定向到Unicode域

时间:2010-08-12 18:02:30

标签: java redirect character-encoding servlets

我在使用Unicode-URLs向servlet发送重定向时遇到问题。

即。考虑土耳其语中的以下网址

  

http://türkçeisimtescil.com

如果您将其粘贴到浏览器的地址栏中,则会有效。但它被翻译为

  

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

,根据您的要求,您的浏览器。

假设我有第一个带有UTF8特定字符的URL,我从数据库中成功获取了它。我想将我的servlet重定向到该URL。

但是当我执行response.sendRedirect(url);时(根据标题),我会将我重定向到www.t%1frk%e7eisimtescil.com

我甚至尝试了response.sendRedirect("http://www.t\u011Frk\u00E7eisimtescil.com");(内联编码),响应完全相同。

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

我无法弄清楚编码被破坏的地方。任何帮助都表示赞赏。

2 个答案:

答案 0 :(得分: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;

答案 1 :(得分:0)

解决。

java.net.IDN的IDN类通过获取“ponycode”(xn-- ..)URL来解决此问题。

java.net.IDN.toASCII(url)

3连续自答:ftw:)