Перенаправление сервлета на Unicode-домены - PullRequest
6 голосов
/ 12 августа 2010

У меня проблемы с отправкой перенаправлений в сервлет с Unicode-URL.

т.е. рассмотрим следующий URL на турецком

http://türkçeisimtescil.com

Это работает, если вы вставите его в адресную строку браузера. Однако это переводится на

http://xn - trkeisimtescil-ijb74a.com

вашим браузером по вашему запросу.

Допустим, у меня есть первый URL с характерными для UTF8 символами, и я успешно получил его из БД. Я хочу перенаправить свой сервлет на этот URL.

Однако, когда я просто делаю response.sendRedirect(url); (в соответствии с заголовками), он перенаправляет меня на www.t%1frk%e7eisimtescil.com

Я пробовал даже response.sendRedirect("http://www.t\u011Frk\u00E7eisimtescil.com"); (встроенное кодирование), и ответ точно такой же.

Возможно, если я получу türkçeisimtescil.com в заголовках, браузер преобразует его в формат xn--.., и это будет успешно.

Я не мог понять, где кодировка сломалась. Любая помощь приветствуется.

Ответы [ 2 ]

7 голосов
/ 12 августа 2010

Это интернационализированное доменное имя (IDN). Его преобразование между ASCII и 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;
0 голосов
/ 12 августа 2010

решаемая.

Класс IDN java.net.IDN решает эту проблему путем получения URL-адресов "ponycode" (xn-- ..).

java.net.IDN.toASCII(url)

3 автоответчика подряд ftw:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...