Я получаю следующее предупреждение при использовании java.net.URLEncoder.encode
:
предупреждение: [не рекомендуется] кодировать (java.lang.String) в java.net.URLEncoder устарел
Что я должен использовать вместо этого?
Я получаю следующее предупреждение при использовании java.net.URLEncoder.encode
:
предупреждение: [не рекомендуется] кодировать (java.lang.String) в java.net.URLEncoder устарел
Что я должен использовать вместо этого?
Ответы:
Используйте другой encode
метод в URLEncoder :
URLEncoder.encode(String, String)
Первый параметр - это текст для кодирования; вторая - имя используемой кодировки символов (например, UTF-8
). Например:
System.out.println(
URLEncoder.encode(
"urlParameterString",
java.nio.charset.StandardCharsets.UTF_8.toString()
)
);
StandardCharsets.US_ASCII
и StandardCharsets.UTF_8
т. д. К сожалению, URLEncoder.encode
не принимает Charset
... (но многие другие методы принимают).
URLEncoder.encode(<urlStringToBeEncoded>, StandardCharsets.UTF_8.name())
. Используя константу статического UTF_8
«ы toString()
метода в качестве схемы кодировки символов бросает java.nio.charset.IllegalCharsetNameException: java.nio.charset.CharsetICU[UTF-8]
как toString()
возвращает„java.nio.charset.CharsetICU [UTF-8]“. Чтобы получить желаемый «UTF-8», используйте name()
вместо этого его метод.
Вы должны использовать:
URLEncoder.encode("NAME", "UTF-8");
Используйте класс URLEncoder :
URLEncoder.encode(String s, String enc)
Куда :
s - Строка для перевода.
enc - Имя поддерживаемой кодировки символов .
Стандартные кодировки:
US-ASCII Семибитовый ASCII, он же ISO646-US, он же базовый латинский блок набора символов Unicode, ISO-8859-1 ISO, латинский алфавит № 1, он же ISO-LATIN-1.
UTF-8 Восьмибитный формат преобразования UCS
UTF-16BE 16-битный формат преобразования UCS, порядок байтов с прямым порядком байтов
UTF-16LE 16-битный формат преобразования UCS, порядок байтов с прямым порядком байтов
UTF-16 16-битный формат преобразования UCS, порядок байтов, идентифицируемый необязательной меткой порядка байтов
Пример:
import java.net.URLEncoder;
String stringEncoded = URLEncoder.encode(
"This text must be encoded! aeiou áéíóú ñ, peace!", "UTF-8");
Первый параметр - это String для кодирования; второе - имя используемой кодировки символов (например, UTF-8).
В качестве дополнительной ссылки для других ответов вместо использования «UTF-8» вы можете использовать:
HTTP.UTF_8
которая включена с Java 4 как часть библиотеки org.apache.http.protocol, которая включена также с Android API 1.
org.apache.http.protocol.HTTP
классов.
Использование org.apache.commons.httpclient.URI
не является строго проблемой; проблема в том, что вы нацелены не на тот конструктор, который не рекомендуется.
Используя только
new URI( [string] );
Будет действительно помечать это как обесцененное. Необходимо предоставить как минимум один дополнительный аргумент (первый, ниже), а в идеале два:
escaped
: true, если последовательность символов URI находится в экранированной форме. ложь в противном случае.charset
: строка charset для экранирования, если требуетсяЭто будет предназначаться для недооцененного конструктора в пределах этого класса. Таким образом, идеальное использование будет таким:
new URI( [string], true, StandardCharsets.UTF_8.toString() );
Немного сумасшедший - поздно в игре (более чем 11 лет спустя - egad! ), Но я надеюсь, что это поможет кому-то еще, особенно если метод в дальнем конце все еще ожидает URI, такой как org.apache.commons.httpclient.setURI()
.