将Servlet重定向到Unicode域名

6

我在向servlet发送Unicode-URL的重定向时遇到了问题。

例如,考虑以下土耳其语中的url:

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个回答

7

0

问题已解决。

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

java.net.IDN.toASCII(url)

三连自问自答,胜利在望 :)


你很快!请注意,您只想转换域(主机)部分。请看我的答案。 - BalusC
实际上,我需要整个URL(权限、端口、查询字符串、域)进行转换。当然,IDN ponycode 只适用于域名。我正在寻找一个方便的解决方案,因为它会执行类似 xn--http://.. 的操作,这对我来说是意外的。有什么想法吗? - ahmet alp balkan
有趣的是,它可以很好地生成http://xn--用于http://A.türkçehttp://w.türkçe,但对于http://türkçeblabla...却生成了xn--http://,这让我非常苦恼。 - ahmet alp balkan
问题很简单:`String idn = IDN.toASCII("http://türkçeisimtescil.com"); System.out.println(idn);`生成了错误的 xn--http:// which。我应该只转换域名,而不会在 authentication:data@and:port/orFile?plus=querystrings#and_refs 中丢失任何内容。 - ahmet alp balkan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接