urlencoding urlencoder urldecoder new example encoded java url urlencode

urldecoder - Codificación de la URL de Java: URLEncoder vs. URI



urlencoder encode utf-8 example java (2)

Aunque creo que la respuesta de @fge es la correcta, ya que estaba usando un servicio web de terceros que se basaba en la codificación descrita en el artículo de W3Schools, seguí la respuesta de Java equivalente al componente encriptURIComponent de JavaScript que produce resultados idénticos.

public static String encodeURIComponent(String s) { String result; try { result = URLEncoder.encode(s, "UTF-8") .replaceAll("//+", "%20") .replaceAll("//%21", "!") .replaceAll("//%27", "''") .replaceAll("//%28", "(") .replaceAll("//%29", ")") .replaceAll("//%7E", "~"); } catch (UnsupportedEncodingException e) { result = s; } return result; }

Mirando en la página web de codificación de URL de W3 Schools , se dice que @ debe estar codificada como %40 , y que el space debe estar codificado como %20 .

He intentado tanto URLEncoder como URI , pero tampoco lo hace correctamente:

import java.net.URI; import java.net.URLEncoder; public class Test { public static void main(String[] args) throws Exception { // Prints me%40home.com (CORRECT) System.out.println(URLEncoder.encode("[email protected]", "UTF-8")); // Prints Email+Address (WRONG: Should be Email%20Address) System.out.println(URLEncoder.encode("Email Address", "UTF-8")); // http://www.home.com/test?Email%[email protected] // (WRONG: it has not encoded the @ in the email address) URI uri = new URI("http", "www.home.com", "/test", "Email [email protected]", null); System.out.println(uri.toString()); } }

Por alguna razón, URLEncoder hace la dirección de correo electrónico correctamente pero no espacios, y URI hace espacios de moneda pero no direcciones de correo electrónico.

¿Cómo debo codificar estos 2 parámetros para que sean coherentes con lo que dice w3schools que es correcto (o es w3schools incorrecto?)


La sintaxis de URI se define mediante RFC 3986 (el contenido permitido para una cadena de consulta se define en la sección 3.4). El URI de Java cumple con este RFC, con algunas advertencias mencionadas en su Javadoc .

Notará que la pchar gramática pchar está definida por:

pchar = sin reserva / pct-encoded / sub-delims / ":" / "@"

Lo que significa que una @ es legal en una cadena de consulta.

Confíe en URI. Hará lo correcto, "legal".

Finalmente, si echas un vistazo al Javadoc de URLEncoder , verás que dice:

Esta clase contiene métodos estáticos para convertir una cadena a la aplicación / x-www-form-urlencoded en formato MIME.

Lo que no es lo mismo que una cadena de consulta según lo definido por la especificación URI.