关于url:java.net.URLEncoder.encode(String)已过时,我应该使用什么代替?

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

使用java.net.URLEncoder.encode时收到以下警告:

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

我应该改用什么?


在URLEncoder中使用其他encode方法:

第一个参数是要编码的文本。第二个是要使用的字符编码的名称(例如UTF-8)。例如:

1
2
3
4
5
6
System.out.println(
  URLEncoder.encode(
   "urlParameterString",
    java.nio.charset.StandardCharsets.UTF_8.toString()
  )
);


您应该使用:

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

使用URLEncoder类:

1
URLEncoder.encode(String s, String enc)

哪里:

s - String to be translated.

enc - The name of a supported character encoding.

标准字符集:

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

例:

1
2
3
4
import java.net.URLEncoder;

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

作为其他响应的其他参考,可以使用:代替使用" UTF-8":

HTTP.UTF_8

从Java 4开始就包含在org.apache.http.protocol库中,而从Android API 1开始也包含了该库。


第一个参数是要编码的字符串;第二个是要使用的字符编码的名称(例如UTF-8)。


org.apache.commons.httpclient.URI的使用严格来说不是问题。问题在于您针对的是错误的构造函数(已过时)。

仅使用

1
new URI( [string] );

确实会将其标记为已折旧。所需要的是至少提供一个附加的参数(下面是第一个参数),最好是两个:

  • escaped:如果URI字符序列为转义形式,则为true。否则为假。
  • charset:要进行转义编码的字符集字符串,如果
    需要
  • 这将针对该类中未折旧的构造函数。因此理想的用法是这样的:

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

    在游戏中有些疯狂(11年后才出现头发-egad!),但我希望这对其他人有帮助,尤其是如果远端的方法仍期望使用URI,例如org.apache.commons.httpclient.setURI()时。