java.net.URLEncoder.encode(String) is deprecated, what should I use instead?

JavaUrlNetwork ProgrammingDeprecated

Java Problem Overview


I get the following warning when using java.net.URLEncoder.encode:

warning: [deprecation] encode(java.lang.String)
in java.net.URLEncoder has been deprecated

What should I be using instead?

Java Solutions


Solution 1 - Java

Use the other encode method in URLEncoder:

URLEncoder.encode(String, String)

The first parameter is the text to encode; the second is the name of the character encoding to use (e.g., UTF-8). For example:

System.out.println(
  URLEncoder.encode(
    "urlParameterString",
    java.nio.charset.StandardCharsets.UTF_8.toString()
  )
);

Solution 2 - Java

You should use:

URLEncoder.encode("NAME", "UTF-8");

Solution 3 - Java

Use the class URLEncoder:

URLEncoder.encode(String s, String enc)

Where : > s - String to be translated.

> enc - The name of a supported character encoding.

Standard charsets:

>US-ASCII Seven-bit ASCII, a.k.a. ISO646-US, a.k.a. the Basic Latin block of the Unicode character set ISO-8859-1 ISO Latin Alphabet No. 1, a.k.a. ISO-LATIN-1

> UTF-8 Eight-bit UCS Transformation Format

> UTF-16BE Sixteen-bit UCS Transformation Format, big-endian byte order

>UTF-16LE Sixteen-bit UCS Transformation Format, little-endian byte order

>UTF-16 Sixteen-bit UCS Transformation Format, byte order identified by an optional byte-order mark

Example:

import java.net.URLEncoder;

String stringEncoded = URLEncoder.encode(
    "This text must be encoded! aeiou áéíóú ñ, peace!", "UTF-8");

Solution 4 - Java

The first parameter is the String to encode; the second is the name of the character encoding to use (e.g., UTF-8).

Solution 5 - Java

The usage of org.apache.commons.httpclient.URI is not strictly an issue; what is an issue is that you target the wrong constructor, which is depreciated.

Using just

new URI( [string] );

Will indeed flag it as depreciated. What is needed is to provide at minimum one additional argument (the first, below), and ideally two:

  1. escaped: true if URI character sequence is in escaped form. false otherwise.
  2. charset: the charset string to do escape encoding, if required

This will target a non-depreciated constructor within that class. So an ideal usage would be as such:

new URI( [string], true, StandardCharsets.UTF_8.toString() );

A bit crazy-late in the game (a hair over 11 years later - egad!), but I hope this helps someone else, especially if the method at the far end is still expecting a URI, such as org.apache.commons.httpclient.setURI().

Solution 6 - Java

As an additional reference for the other responses, instead of using "UTF-8" you can use:

HTTP.UTF_8

which is included since Java 4 as part of the org.apache.http.protocol library, which is included also since Android API 1.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionFrank KruegerView Question on Stackoverflow
Solution 1 - JavaWill WagnerView Answer on Stackoverflow
Solution 2 - JavaAtul DarneView Answer on Stackoverflow
Solution 3 - JavaJorgesysView Answer on Stackoverflow
Solution 4 - Javauser3591718View Answer on Stackoverflow
Solution 5 - JavaR. KåbisView Answer on Stackoverflow
Solution 6 - JavahtafoyaView Answer on Stackoverflow