我在使用Unicode-URLs向servlet发送重定向时遇到问题。
即。考虑土耳其语中的以下网址
如果您将其粘贴到浏览器的地址栏中,则会有效。但它被翻译为
,根据您的要求,您的浏览器。
假设我有第一个带有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--..
格式,并且会成功。
我无法弄清楚编码被破坏的地方。任何帮助都表示赞赏。
答案 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:)