Recebo o seguinte aviso ao usar java.net.URLEncoder.encode
:
aviso: codificação [obsoleta] (java.lang.String) no java.net.URLEncoder foi descontinuado
O que devo usar em vez disso?
Recebo o seguinte aviso ao usar java.net.URLEncoder.encode
:
aviso: codificação [obsoleta] (java.lang.String) no java.net.URLEncoder foi descontinuado
O que devo usar em vez disso?
Respostas:
Use o outro encode
método no URLEncoder :
URLEncoder.encode(String, String)
O primeiro parâmetro é o texto a codificar; o segundo é o nome da codificação de caracteres a ser usada (por exemplo, UTF-8
). Por exemplo:
System.out.println(
URLEncoder.encode(
"urlParameterString",
java.nio.charset.StandardCharsets.UTF_8.toString()
)
);
StandardCharsets.US_ASCII
, StandardCharsets.UTF_8
etc. Infelizmente, URLEncoder.encode
não aceita um Charset
... (mas muitas outras moethods fazer).
URLEncoder.encode(<urlStringToBeEncoded>, StandardCharsets.UTF_8.name())
. Usando a constante estática UTF_8
do toString()
método como o esquema de codificação de caracteres lança java.nio.charset.IllegalCharsetNameException: java.nio.charset.CharsetICU[UTF-8]
como os toString()
retornos 'java.nio.charset.CharsetICU [UTF-8]'. Para obter o "UTF-8" desejado, use seu name()
método.
Você deveria usar:
URLEncoder.encode("NAME", "UTF-8");
Use a classe URLEncoder :
URLEncoder.encode(String s, String enc)
Onde :
s - String a ser traduzida.
enc - O nome de uma codificação de caracteres suportada .
Conjuntos de caracteres padrão:
US-ASCII ASCII de sete bits, também conhecido como ISO646-US, também conhecido como bloco latino básico do conjunto de caracteres Unicode ISO-8859-1 Alfabeto latino ISO nº 1, também conhecido como ISO-LATIN-1
Formato de transformação UCS de oito bits UTF-8
UTF-16BE Formato de transformação UCS de dezesseis bits, ordem de bytes big-endian
Formato de transformação UCS de dezesseis bits UTF-16LE , ordem de bytes little-endian
Formato de transformação UCS de dezesseis bits UTF-16 , ordem de bytes identificada por uma marca de ordem de bytes opcional
Exemplo:
import java.net.URLEncoder;
String stringEncoded = URLEncoder.encode(
"This text must be encoded! aeiou áéíóú ñ, peace!", "UTF-8");
O primeiro parâmetro é a String a codificar; o segundo é o nome da codificação de caracteres a ser usada (por exemplo, UTF-8).
Como referência adicional para as outras respostas, em vez de usar "UTF-8", você pode usar:
HTTP.UTF_8
que está incluído desde o Java 4 como parte da biblioteca org.apache.http.protocol, que também está incluído desde a API 1 do Android.
org.apache.http.protocol.HTTP
classe de biblioteca Apache HttpClient 4.x.
O uso de org.apache.commons.httpclient.URI
não é estritamente um problema; o que é um problema é que você direcione o construtor errado, que é depreciado.
Usando apenas
new URI( [string] );
De fato, o sinalizará como depreciado. O que é necessário é fornecer no mínimo um argumento adicional (o primeiro, abaixo) e, idealmente, dois:
escaped
: true se a sequência de caracteres URI estiver na forma de escape. false caso contrário.charset
: a sequência de caracteres charset para fazer a codificação de escape, se necessárioIsso terá como alvo um construtor não depreciado nessa classe. Portanto, um uso ideal seria o seguinte:
new URI( [string], true, StandardCharsets.UTF_8.toString() );
Um pouco louco no final do jogo (um cabelo mais de 11 anos depois - egad! ), Mas espero que isso ajude outra pessoa, especialmente se o método mais distante for ainda esperando um URI, como org.apache.commons.httpclient.setURI()
.