2010-08-12 12 views
6

Tengo problemas para enviar las redirecciones a servlet con Unicode-URL.Redirigir el servlet a Unicode-Domains

es decir, considerar la siguiente url en turco

http://türkçeisimtescil.com

Funciona si pega en la barra de direcciones del navegador. Sin embargo, se tradujo a

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

por su navegador a su solicitud.

Digamos que tengo la primera URL con caracteres específicos de UTF8 y la obtengo con éxito de DB. Quiero redirigir mi servlet a esa URL.

Sin embargo, cuando acabo de hacer response.sendRedirect(url); (de acuerdo con cabeceras) me vuelve a dirigir a www.t%1frk%e7eisimtescil.com

Probé incluso response.sendRedirect("http://www.t\u011Frk\u00E7eisimtescil.com"); (codificación en línea) y la respuesta es exactamente la misma.

Tal vez si obtengo türkçeisimtescil.com en los encabezados, el navegador lo convertirá al formato xn--.. y tendrá éxito.

No pude averiguar dónde se rompió la codificación. Cualquier ayuda es apreciada.

Respuesta

7

Esa es una Internationalized Domain Name (IDN). Su conversión entre ASCII and Unicode se especifica en RFC 3490. En Java, puede usar java.net.IDN para convertir entre uno y otro. Puede usar java.net.URL para obtener la parte del host de la URL.

String host = new URL("http://türkçeisimtescil.com").getHost(); 
String idn = IDN.toASCII(host); 
String newURL = "http://" + idn; 
+0

ya descubrí gracias de todos modos. –

0

Resuelto.

IDN clase de java.net.IDN resuelve esto obteniendo "ponycode" (xn-- ..) URLs.

java.net.IDN.toASCII(url) 

3 auto-respuesta en una fila ftw :)

+0

¡rápido! Tenga en cuenta que desea convertir solo la parte del dominio (host). Ver mi respuesta – BalusC

+0

En realidad necesito toda la url (autoridad, puerto, querystring, dominio) para convertir. Por supuesto IDN ponycode debería aplicarse solo en el dominio. Estoy buscando una solución conveniente porque hace algo como xn - http: // .. que es inesperado (por mí). ¿Algunas ideas? –

+0

Curiosamente, genera un 'http: // xn -' para 'http: // A.türkçe' o' http: // w.türkçe' muy bien pero 'xn - http: //' para 'http: // türkçeblabla ... 'tirando de mi cabello. –

Cuestiones relacionadas