Podczas używania pojawia się następujące ostrzeżenie java.net.URLEncoder.encode
:
ostrzeżenie: kodowanie [przestarzałe] (java.lang.String) w java.net.URLEncoder został uznany za przestarzały
Czego powinienem używać zamiast tego?
Podczas używania pojawia się następujące ostrzeżenie java.net.URLEncoder.encode
:
ostrzeżenie: kodowanie [przestarzałe] (java.lang.String) w java.net.URLEncoder został uznany za przestarzały
Czego powinienem używać zamiast tego?
Odpowiedzi:
Użyj innej encode
metody w URLEncoder :
URLEncoder.encode(String, String)
Pierwszy parametr to tekst do zakodowania; drugi to nazwa kodowania znaku, którego należy użyć (np UTF-8
.). Na przykład:
System.out.println(
URLEncoder.encode(
"urlParameterString",
java.nio.charset.StandardCharsets.UTF_8.toString()
)
);
StandardCharsets.US_ASCII
, StandardCharsets.UTF_8
itd. Niestety, URLEncoder.encode
nie akceptuje Charset
... (ale wiele innych moethods zrobić).
URLEncoder.encode(<urlStringToBeEncoded>, StandardCharsets.UTF_8.name())
. Za pomocą stałej statycznego UTF_8
„S toString()
sposobu jak schemat kodowania postać rzuca java.nio.charset.IllegalCharsetNameException: java.nio.charset.CharsetICU[UTF-8]
jak toString()
zwrotów«java.nio.charset.CharsetICU [UTF-8]». Aby uzyskać pożądany „UTF-8”, użyj jego name()
metody.
Powinieneś użyć:
URLEncoder.encode("NAME", "UTF-8");
Użyj klasy URLEncoder :
URLEncoder.encode(String s, String enc)
Gdzie :
s - Ciąg do przetłumaczenia.
enc - nazwa obsługiwanego kodowania znaków .
Standardowe zestawy znaków:
US-ASCII Siedmiobitowy ASCII, znany również jako ISO646-US, znany również jako podstawowy blok łaciński zestawu znaków Unicode ISO-8859-1 ISO alfabet łaciński nr 1, znany również jako ISO-LATIN-1
UTF-8 Ośmiobitowy format transformacji UCS
UTF-16BE Szesnastobitowy format transformacji UCS, kolejność bajtów big-endian
UTF-16LE Szesnastobitowy format transformacji UCS, kolejność bajtów little-endian
UTF-16 Szesnastobitowy format transformacji UCS, kolejność bajtów identyfikowana przez opcjonalny znak kolejności bajtów
Przykład:
import java.net.URLEncoder;
String stringEncoded = URLEncoder.encode(
"This text must be encoded! aeiou áéíóú ñ, peace!", "UTF-8");
Pierwszym parametrem jest Łańcuch do zakodowania; drugi to nazwa kodowania znaków do użycia (np. UTF-8).
Jako dodatkowe odniesienie dla innych odpowiedzi, zamiast używać „UTF-8” , możesz użyć:
HTTP.UTF_8
który jest zawarty od Java 4 jako część biblioteki org.apache.http.protocol, który jest również zawarty od API Android 1.
org.apache.http.protocol.HTTP
klasie biblioteki Apache HttpClient 4.x.
Korzystanie z org.apache.commons.httpclient.URI
nie jest ściśle problemem; problemem jest to, że celujesz w niewłaściwy konstruktor, który jest amortyzowany.
Używam tylko
new URI( [string] );
Rzeczywiście oznaczy to jako amortyzację. Potrzebne jest podanie co najmniej jednego dodatkowego argumentu (pierwszego, poniżej), a najlepiej dwóch:
escaped
: true, jeśli sekwencja znaków URI jest w postaci znaku zmiany znaczenia. fałsz inaczej.charset
: ciąg znaków, aby wykonać kodowanie specjalne, jeśli jest wymaganeBędzie to dotyczyć niezalecanego konstruktora w tej klasie. Idealne użycie byłoby takie:
new URI( [string], true, StandardCharsets.UTF_8.toString() );
Trochę szalony-późno w grze (włosy ponad 11 lat później - egad! ), Ale mam nadzieję, że to pomaga komuś innemu, szczególnie jeśli metoda na drugim końcu jest wciąż oczekuje URI, takiego jak org.apache.commons.httpclient.setURI()
.