J'ai expérimenté divers bits de code Java pour essayer de trouver quelque chose qui encodera une chaîne contenant des guillemets, des espaces et des caractères Unicode "exotiques" et produira une sortie identique à la fonction encodURIComponent de JavaScript .
Ma chaîne de test de torture est: "A" B ± "
Si j'entre l'instruction JavaScript suivante dans Firebug:
encodeURIComponent('"A" B ± "');
—Ensuite, j'obtiens:
"%22A%22%20B%20%C2%B1%20%22"
Voici mon petit programme de test 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"));
}
}
—Ce programme génère:
URLEncoder.encode renvoie% 22A% 22 + B +% C2% B1 +% 22 getBytes renvoie "A" B ± "
Proche, mais pas de cigare! Quelle est la meilleure façon d'encoder une chaîne UTF-8 à l'aide de Java afin qu'elle produise la même sortie que celle de JavaScript encodeURIComponent
?
EDIT: J'utilise Java 1.4 pour passer à Java 5 sous peu.