Java 将Servlet重定向到Unicode域

Java 将Servlet重定向到Unicode域,java,redirect,character-encoding,servlets,Java,Redirect,Character Encoding,Servlets,我在使用Unicode URL向servlet发送重定向时遇到问题 即在土耳其中考虑以下URL 如果您将其粘贴到浏览器的地址栏中,它就会工作。然而,它被翻译成 根据您的要求,由您的浏览器提供 假设我有第一个带有UTF8特定字符的URL,并且我成功地从DB获得了它。我想将servlet重定向到该URL 然而,当我只做response.sendRedirect(url)时(根据标题)它将我重定向到www.t%1frk%e7eisimtescil.com 我甚至尝试了response.sendRe

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

即在土耳其

中考虑以下URL

如果您将其粘贴到浏览器的地址栏中,它就会工作。然而,它被翻译成

根据您的要求,由您的浏览器提供

假设我有第一个带有UTF8特定字符的URL,并且我成功地从DB获得了它。我想将servlet重定向到该URL

然而,当我只做
response.sendRedirect(url)时(根据标题)它将我重定向到
www.t%1frk%e7eisimtescil.com

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

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

我不知道编码在哪里被破坏了。感谢您的帮助。

已解决

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

3连续自动应答ftw:)

这是一个(IDN)。其在之间的转换在中指定。在Java中,可以使用在一个和另一个之间进行转换。您可以使用从URL获取主机部件

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

你真快!请注意,您只希望转换域(主机)部分。请看我的答案。实际上,我需要转换整个url(权限、端口、查询字符串、域)。当然,IDN ponycode应该只在域上应用。我正在寻找一个方便的解决方案,因为它有类似xn的功能--http://.. 这是(我)意想不到的。有什么想法吗?有趣的是,它生成了一个
http://xn--
for
http://A.türkçe
http://w.türkçe
非常好,但是
xn--http://
对于
http://türkçeblabla…
让我毛骨悚然。问题是:
字符串idn=idn.toASCII(“http://türkçeisimtescil.com”);系统输出打印项次(idn)
生成一个
xn--http://which
是错误的。我应该只转换域,而不会在
身份验证中丢失任何内容:data@and:port/orFile?plus=querystring#和_refs
String host = new URL("http://türkçeisimtescil.com").getHost();
String idn = IDN.toASCII(host);
String newURL = "http://" + idn;