2010-08-12 3 views
6

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

т.е. рассмотрим следующий 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--.., и он будет успешным.

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

ответ

7

Это Internationalized Domain Name (IDN). Его конверсия между ASCII and 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

уже В любом случае, спасибо. –

0

Решено.

IDN класс java.net.IDN решает это путем получения URL-адреса «ponycode» (xn-- ..).

java.net.IDN.toASCII(url) 

3 само-ответ в строке FTW :)

+0

Вы быстро! Обратите внимание, что вы хотите конвертировать только часть домена (хоста). См. Мой ответ. – BalusC

+0

На самом деле мне нужен весь url (полномочия, порт, querystring, domain) для преобразования. Конечно, IDN ponycode должен применяться только к домену. Я ищу удобное решение, потому что он делает что-то вроде xn - http: // .., что неожиданно (по мне). Есть идеи? –

+0

Интересно, что он очень хорошо генерирует 'http: // xn -' для 'http: // A.türkçe' или' http: // w.türkçe', но 'xn - http: //' для 'http: // türkçeblabla ... «вытаскиваю волосы. –

Смежные вопросы