Recibo la siguiente advertencia cuando uso java.net.URLEncoder.encode
:
advertencia: codificación [obsoleta] (java.lang.String) en java.net.URLEncoder ha quedado en desuso
¿Qué debería usar en su lugar?
Recibo la siguiente advertencia cuando uso java.net.URLEncoder.encode
:
advertencia: codificación [obsoleta] (java.lang.String) en java.net.URLEncoder ha quedado en desuso
¿Qué debería usar en su lugar?
Respuestas:
Use el otro encode
método en URLEncoder :
URLEncoder.encode(String, String)
El primer parámetro es el texto a codificar; el segundo es el nombre de la codificación de caracteres a usar (por ejemplo, UTF-8
). Por ejemplo:
System.out.println(
URLEncoder.encode(
"urlParameterString",
java.nio.charset.StandardCharsets.UTF_8.toString()
)
);
StandardCharsets.US_ASCII
, StandardCharsets.UTF_8
etc. Por desgracia, URLEncoder.encode
no acepta un Charset
... (pero muchas otras moethods hacer).
URLEncoder.encode(<urlStringToBeEncoded>, StandardCharsets.UTF_8.name())
. El uso de la constante estática UTF_8
's toString()
método como el esquema de codificación de caracteres lanza java.nio.charset.IllegalCharsetNameException: java.nio.charset.CharsetICU[UTF-8]
como los toString()
retornos 'java.nio.charset.CharsetICU [UTF-8]'. Para obtener el "UTF-8" deseado, utilice su name()
método.
Deberías usar:
URLEncoder.encode("NAME", "UTF-8");
Use la clase URLEncoder :
URLEncoder.encode(String s, String enc)
Dónde :
s - Cadena a traducir.
enc : el nombre de una codificación de caracteres compatible .
Cajas estándar:
US-ASCII ASCII de siete bits, también conocido como ISO646-US, también conocido como el bloque latino básico del juego de caracteres Unicode ISO-8859-1 ISO Latin Alphabet No. 1, también conocido como ISO-LATIN-1
UTF-8 Formato de transformación UCS de ocho bits
UTF-16BE Formato de transformación UCS de dieciséis bits, orden de bytes big-endian
UTF-16LE Formato de transformación UCS de dieciséis bits, orden de bytes little endian
UTF-16 Formato de transformación UCS de dieciséis bits, orden de bytes identificado por una marca opcional de orden de bytes
Ejemplo:
import java.net.URLEncoder;
String stringEncoded = URLEncoder.encode(
"This text must be encoded! aeiou áéíóú ñ, peace!", "UTF-8");
El primer parámetro es la cadena a codificar; el segundo es el nombre de la codificación de caracteres a utilizar (por ejemplo, UTF-8).
Como referencia adicional para las otras respuestas, en lugar de usar "UTF-8" puede usar:
HTTP.UTF_8
que se incluye desde Java 4 como parte de la biblioteca org.apache.http.protocol, que también se incluye desde Android API 1.
org.apache.http.protocol.HTTP
clase de biblioteca Apache HttpClient 4.x.
El uso de org.apache.commons.httpclient.URI
no es estrictamente un problema; lo que es un problema es que apuntas al constructor incorrecto, que se deprecia.
Usando solo
new URI( [string] );
De hecho lo marcará como depreciado. Lo que se necesita es proporcionar como mínimo un argumento adicional (el primero, a continuación), e idealmente dos:
escaped
: verdadero si la secuencia de caracteres URI está en forma de escape. falso de lo contrario.charset
: la cadena charset para hacer la codificación de escape, si es necesarioEsto apuntará a un constructor no depreciado dentro de esa clase. Entonces, un uso ideal sería como tal:
new URI( [string], true, StandardCharsets.UTF_8.toString() );
Un poco loco al final del juego (un pelo más de 11 años después, ¡por ejemplo! ), Pero espero que esto ayude a alguien más, especialmente si el método en el otro extremo todavía espera un URI, como org.apache.commons.httpclient.setURI()
.