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

前端 未结 6 1852
佛祖请我去吃肉
佛祖请我去吃肉 2020-11-29 21:08

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

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


        
相关标签:
6条回答
  • 2020-11-29 21:47

    You should use:

    URLEncoder.encode("NAME", "UTF-8");
    
    0 讨论(0)
  • 2020-11-29 21:49

    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()
      )
    );
    
    0 讨论(0)
  • 2020-11-29 21:53

    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");
    
    0 讨论(0)
  • 2020-11-29 21:53

    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().

    0 讨论(0)
  • 2020-11-29 22:00

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

    0 讨论(0)
  • 2020-11-29 22:01

    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.

    0 讨论(0)
提交回复
热议问题