libreria clase java rfc2396

clase - libreria url java



Codificar y decodificar URL rfc2396 (4)

Los javadocs recomiendan usar la clase java.net.URI para completar la codificación. Para garantizar que la clase de URI codifica correctamente la url, se debe utilizar uno de los constructores de argumentos múltiples. Estos constructores realizarán la codificación requerida, pero requieren analizar cualquier cadena de URL en los parámetros.

Si desea decodificar, debe construir el URI con el constructor de argumento único, que no codifica. A continuación, puede llamar a métodos como getPath () etc. para recuperar y construir la URL descodificada.

¿Cuál es la mejor manera de codificar cadenas de URL de modo que sean compatibles con rfc2396 y decodifiquen una cadena que cumpla con rfc2396 de manera que, por ejemplo,% 20 se sustituya por un carácter de espacio?

editar: las clases URLEncoder y URLDecoder no codifican / decodifican las URL que cumplen con rfc2396, codifican a un tipo MIME de aplicación / x-www-form-urlencoded que se utiliza para codificar datos de parámetros de formulario HTML.


Sus partes componentes, que potencialmente contienen caracteres que deben ser escapados, ya deberían haberse escapado usando URLEncoder antes de ser concatenadas en un URI.

Si tiene un URI con caracteres fuera de banda (como espacio, "<> [] {} / | ^` y bytes que no son ASCII), no es realmente un URI. Puede intentar repararlo mediante manualmente% -escaping ellos, pero esta es una operación de última hora de reparación y no una forma estándar de codificación. Esto generalmente es necesario cuando se aceptan URI potencialmente malformados de la entrada del usuario, pero no es una operación estandarizada y yo don No conozco ninguna función incorporada de la biblioteca Java que lo haga por usted, es posible que tenga que hackear algo usted mismo con un RegExp.

En la otra dirección, debe separar su URI en sus partes componentes (cada parte de ruta separada, nombre y valor de parámetro de consulta, etc.) antes de poder deshacer cada parte (usando un URLDecoder). No hay una forma sensata de codificar% un URI completo de una vez; podría intentar ''decodificar% -escapes que no decodifiquen a delimitadores'' (como /? = &;%) pero le quedaría una cadena extraña e incoherente que no se ajusta a ningún estándar de procesamiento de URI.

URLEncoder / URLDecoder están bien para el manejo de componentes de consulta de URI, tanto nombres como valores. Sin embargo, no son del todo correctos para el manejo de los componentes de la ruta URI. La diferencia es que el carácter ''+'' no significa un espacio en una parte de ruta. Puede solucionar esto con una simple sustitución de cadena: después de URLEncoding, reemplace ''+'' con ''% 20''; antes de URLDecoding, reemplace ''+'' con ''% 2B''. Puede ignorar la diferencia si no planea incluir segmentos que contengan espacios o más en su ruta.



Use la clase URI de la siguiente manera:

URI uri = new URI("http", "//www.someurl.com/has spaces in url", null); URL url = uri.toURL();

o si quieres un String:

String urlString = uri.toASCIIString();