Tenho experimentado vários bits de código Java, tentando criar algo que codifique uma string contendo aspas, espaços e caracteres Unicode "exóticos" e produza uma saída idêntica à função encodeURIComponent do JavaScript .
Minha string de teste de tortura é: "A" B ± "
Se eu inserir a seguinte instrução JavaScript no Firebug:
encodeURIComponent('"A" B ± "');
—Então eu obtenho:
"%22A%22%20B%20%C2%B1%20%22"
Este é meu pequeno programa de teste em 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 produz:
URLEncoder.encode retorna% 22A% 22 + B +% C2% B1 +% 22 getBytes retorna "A" B ± "
Perto, mas sem charuto! Qual é a melhor maneira de codificar uma string UTF-8 usando Java para que ela produza a mesma saída do JavaScript encodeURIComponent
?
EDIT: Estou usando o Java 1.4 migrando para o Java 5 em breve.