Java 将Servlet重定向到Unicode域
我在使用Unicode URL向servlet发送重定向时遇到问题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
即在土耳其
中考虑以下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--forhttp://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;