He estado experimentando con varios bits de código Java tratando de encontrar algo que codifique una cadena que contenga comillas, espacios y caracteres Unicode "exóticos" y produzca una salida idéntica a la función encodeURIComponent de JavaScript .
Mi cadena de prueba de tortura es: "A" B ± "
Si ingreso la siguiente declaración de JavaScript en Firebug:
encodeURIComponent('"A" B ± "');
—Entonces obtengo:
"%22A%22%20B%20%C2%B1%20%22"
Aquí está mi pequeño programa de prueba de Java:
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
public class EncodingTest
{
public static void main(String[] args) throws UnsupportedEncodingException
{
String s = "\"A\" B ± \"";
System.out.println("URLEncoder.encode returns "
+ URLEncoder.encode(s, "UTF-8"));
System.out.println("getBytes returns "
+ new String(s.getBytes("UTF-8"), "ISO-8859-1"));
}
}
—Este programa genera:
URLEncoder.encode devuelve% 22A% 22 + B +% C2% B1 +% 22 getBytes devuelve "A" B ± "
¡Cerca, pero no puro! ¿Cuál es la mejor forma de codificar una cadena UTF-8 usando Java para que produzca la misma salida que la de JavaScript encodeURIComponent?
EDITAR: Estoy usando Java 1.4 para pasar a Java 5 en breve.