Ricevo il seguente avviso durante l'utilizzo java.net.URLEncoder.encode
:
attenzione: codifica [deprecazione] (java.lang.String) in java.net.URLEncoder è stato deprecato
Cosa dovrei usare invece?
Ricevo il seguente avviso durante l'utilizzo java.net.URLEncoder.encode
:
attenzione: codifica [deprecazione] (java.lang.String) in java.net.URLEncoder è stato deprecato
Cosa dovrei usare invece?
Risposte:
Utilizzare l'altro encode
metodo in URLEncoder :
URLEncoder.encode(String, String)
Il primo parametro è il testo da codificare; il secondo è il nome della codifica dei caratteri da utilizzare (ad esempio, UTF-8
). Per esempio:
System.out.println(
URLEncoder.encode(
"urlParameterString",
java.nio.charset.StandardCharsets.UTF_8.toString()
)
);
StandardCharsets.US_ASCII
, StandardCharsets.UTF_8
ecc Purtroppo, URLEncoder.encode
non accetta un Charset
... (ma molti altri moethods fare).
URLEncoder.encode(<urlStringToBeEncoded>, StandardCharsets.UTF_8.name())
. Usando la costante staticaUTF_8
's toString()
metodo come uno schema di codifica dei caratteri getta java.nio.charset.IllegalCharsetNameException: java.nio.charset.CharsetICU[UTF-8]
come toString()
restituisce 'java.nio.charset.CharsetICU [UTF-8]'. Per ottenere "UTF-8" desiderato utilizzare name()
invece il suo metodo.
Dovresti usare:
URLEncoder.encode("NAME", "UTF-8");
Utilizzare la classe URLEncoder :
URLEncoder.encode(String s, String enc)
Dove :
S - Stringa da tradurre.
enc - Il nome di una codifica di caratteri supportata .
Set di caratteri standard:
US-ASCII ASCII a sette bit, alias ISO646-US, alias il blocco latino di base del set di caratteri Unicode ISO-8859-1 ISO Alfabeto latino n. 1, alias ISO-LATIN-1
UTF-8 Formato di trasformazione UCS a otto bit
UTF-16BE Formato di trasformazione UCS a sedici bit, ordine byte big-endian
UTF-16LE Formato di trasformazione UCS a sedici bit, ordine byte little-endian
UTF-16 Formato di trasformazione UCS a sedici bit, ordine di byte identificato da un contrassegno di ordine di byte opzionale
Esempio:
import java.net.URLEncoder;
String stringEncoded = URLEncoder.encode(
"This text must be encoded! aeiou áéíóú ñ, peace!", "UTF-8");
Il primo parametro è la stringa da codificare; il secondo è il nome della codifica dei caratteri da utilizzare (ad es. UTF-8).
Come riferimento aggiuntivo per le altre risposte, invece di utilizzare "UTF-8" è possibile utilizzare:
HTTP.UTF_8
che è incluso da Java 4 come parte della libreria org.apache.http.protocol, incluso anche dall'API 1 di Android.
org.apache.http.protocol.HTTP
classe di libreria Apache HttpClient 4.x.
L'uso di org.apache.commons.httpclient.URI
non è strettamente un problema; ciò che è un problema è che hai come target il costruttore sbagliato, che è ammortizzato.
Usando solo
new URI( [string] );
Lo segnalerà come ammortizzato. È necessario fornire almeno un argomento aggiuntivo (il primo, di seguito) e idealmente due:
escaped
: vero se la sequenza di caratteri URI è in formato escape. falso altrimenti.charset
: la stringa charset per eseguire la codifica di escape, se necessarioQuesto sarà indirizzato a un costruttore non deprezzato all'interno di quella classe. Quindi un utilizzo ideale sarebbe come tale:
new URI( [string], true, StandardCharsets.UTF_8.toString() );
Un po 'follemente in ritardo nel gioco (un capello oltre 11 anni dopo - egad! ), Ma spero che questo aiuti qualcun altro, soprattutto se il metodo in fondo sta ancora aspettando un URI, come org.apache.commons.httpclient.setURI()
.