代码之家  ›  专栏  ›  技术社区  ›  ahmet alp balkan

将servlet重定向到unicode域

  •  6
  • ahmet alp balkan  · 技术社区  · 14 年前

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

    也就是说,请考虑以下土耳其语的URL

    http://türkçeisimtescil.com

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

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

    根据您的请求,通过您的浏览器。

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

    但是当我刚开始的时候 response.sendRedirect(url); (根据标题)它将我重定向到 www.t%1frk%e7eisimtescil.com

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

    如果我在邮件头上获得trk§eisimtescil.com,浏览器可能会将其转换为 xn--.. 格式和它将成功。

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

    2 回复  |  直到 13 年前
        1
  •  7
  •   BalusC    14 年前

    那是一个 Internationalized Domain Name (IDN)。它的转换 ASCII and Unicode 中指定 RFC 3490 . 在爪哇,你可以使用 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;
    
        2
  •  0
  •   ahmet alp balkan    14 年前

    解决了的。

    IDN类 java.net.IDN 通过获得“ponycode”(xn--…)来解决这个问题。网址。

    java.net.IDN.toASCII(url)
    

    连续3次自动应答,ftw:)