При використанні я отримую таке попередження java.net.URLEncoder.encode
:
попередження: [deprecation] кодування (java.lang.String) у java.net.URLEкодер застарілий
Що я повинен використовувати замість цього?
При використанні я отримую таке попередження java.net.URLEncoder.encode
:
попередження: [deprecation] кодування (java.lang.String) у java.net.URLEкодер застарілий
Що я повинен використовувати замість цього?
Відповіді:
Використовуйте інший 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 :
URLEncoder.encode(String s, String enc)
Де:
s - Рядок для перекладу.
enc - ім'я підтримуваного кодування символів .
Стандартні схеми:
US-ASCII Семирозрядний ASCII, він же ISO646-US, відомий також як основний латинський блок набору символів Unicode ISO-8859-1 ISO Латинський алфавіт ISO № 1, також ISO-LATIN-1
UTF-8 восьмибітний формат трансформації UCS
UTF-16BE Шістнадцятирозрядний формат трансформації UCS, порядок байтів великого рівня
UTF-16LE Шістнадцятибітовий формат трансформації UCS, порядок байтів з малим ендіанітом
UTF-16 Шістнадцятибітовий формат трансформації UCS, порядок байтів, ідентифікований необов'язковою позначкою байт-порядку
Приклад:
import java.net.URLEncoder;
String stringEncoded = URLEncoder.encode(
"This text must be encoded! aeiou áéíóú ñ, peace!", "UTF-8");
Перший параметр - це рядок для кодування; друге - ім'я кодування символів, яке слід використовувати (наприклад, UTF-8).
В якості додаткового посилання на інші відповіді замість використання "UTF-8" ви можете використовувати:
HTTP.UTF_8
яка включена з Java 4 як частина бібліотеки org.apache.http.protocol, яка також входить з Android API 1.
org.apache.http.protocol.HTTP
класі Apache HttpClient 4.x.
Використання org.apache.commons.httpclient.URI
не є суворо проблемою; що проблема в тому , що ви націлені на неправильний конструктор, який є амортизується.
Використовуючи просто
new URI( [string] );
Дійсно буде позначати це як знецінене. Необхідно навести хоча б один додатковий аргумент (перший, нижче), а в ідеалі два:
escaped
: вірно, якщо послідовність символів URI знаходиться в уникнутий формі. помилково інакше.charset
: рядок діаграми, щоб зробити кодування втечі, якщо потрібноЦе буде націлено на не амортизований конструктор у цьому класі. Тож ідеальне використання було б таким:
new URI( [string], true, StandardCharsets.UTF_8.toString() );
Трохи божевільно пізно в грі (волосся через 11 років - egad! ), Але я сподіваюся, що це допоможе комусь іншому, особливо, якщо метод у віддаленому кінці все ще очікує URI, наприклад org.apache.commons.httpclient.setURI()
.