Eksperymentowałem z różnymi fragmentami kodu Javy, próbując wymyślić coś, co zakoduje ciąg znaków zawierający cudzysłowy, spacje i „egzotyczne” znaki Unicode i wygeneruje dane wyjściowe identyczne z funkcją encodeURIComponent w JavaScript .
Mój ciąg testowy na tortury to: „A” B ± ”
Jeśli wprowadzę następującą instrukcję JavaScript w Firebug:
encodeURIComponent('"A" B ± "');
—Wtedy otrzymam:
"%22A%22%20B%20%C2%B1%20%22"
Oto mój mały testowy program 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"));
}
}
—Ten program generuje:
URLEncoder.encode zwraca% 22A% 22 + B +% C2% B1 +% 22 getBytes zwraca „A” B ± ”
Blisko, ale bez cygara! Jaki jest najlepszy sposób zakodowania łańcucha znaków UTF-8 przy użyciu języka Java, tak aby generował te same dane wyjściowe co JavaScript encodeURIComponent
?
EDYCJA: Wkrótce używam Java 1.4, przenoszę się na Javę 5.