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 |
我应该改用什么?
-
在文档的弃用标签中对此进行了回答:"相反,请使用encode(String,String)方法指定编码。" 请参阅java.sun.com/javase/6/docs/api/java/net/URLEncoder.html。
在URLEncoder中使用其他encode方法:
第一个参数是要编码的文本。第二个是要使用的字符编码的名称(例如UTF-8)。例如:
1 2 3 4 5 6
| System. out. println(
URLEncoder. encode(
"urlParameterString",
java. nio. charset. StandardCharsets. UTF_8. toString()
)
); |
-
@jsh:我很困惑,为什么不应该有一个URLDecoder?为什么这会使Java肿?这些是静态方法。键入它们都需要花费相同的精力。如果您喜欢Python,为什么要用Java编程?是因为使用Java的人比使用Python的人多,而您得到的是Java而不是Python的工作吗?
-
@stepanian是的,您必须在工作所在的地方工作。我通常使用的python包将所有这些编码和解码实用程序放在一个屋顶下。我主要添加此评论是因为我必须去找到URLDecoder,并且我认为这可能会节省一些时间来知道这是必需的。
-
@jsh:很多人喜欢Python。我从未使用过它,但是我确定如果有时间尝试它,我也会喜欢它。但是我也在追逐美元。 Java不是那么糟糕。
-
Hes称它过大是因为它过度填充了全局类名称空间。当您可以同时拥有URL.encode和URL.decode甚至只有URLEncoder.decode时,为什么还要具有URLEncoder.encode和URLDecoder.decode?为什么要使所有这些都变得多余和膨胀?因为它的java。
-
然后,即使几乎所有地方都支持UTF-8,您也必须处理UnsupportedEncodingException。
-
@tc .: Java 7引入了以下常量:StandardCharsets.US_ASCII,StandardCharsets.UTF_8等。不幸的是,URLEncoder.encode不接受Charset ...(但是许多其他方法也可以)。
-
@sleske来自Java 1的常量是HTTP.UTF_8
-
@htafoya,错了。此类可在Apache HttpClient 4.x库org.apache.http.protocol.HTTP类中找到。
-
次要建议-使用URLEncoder.encode(, 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类:
哪里:
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开始也包含了该库。
-
错误的是,该类在Apache HttpClient 4.x库org.apache.http.protocol.HTTP类中找到。
-
@BuhakeSindi是的,我读过API 1,但它是Android而不是Java,无论哪种方式,它都存在于Java 7之前,甚至已经弃用了哈哈。
-
不,该类在任何版本的Java JDK中都不存在。 Android遵循Apache HttpClient库(如果他们也从那里获取源代码,我不会感到惊讶)。
-
警告:不建议使用HTTP中的[UTF_8]。
第一个参数是要编码的字符串;第二个是要使用的字符编码的名称(例如UTF-8)。
org.apache.commons.httpclient.URI的使用严格来说不是问题。问题在于您针对的是错误的构造函数(已过时)。
仅使用
确实会将其标记为已折旧。所需要的是至少提供一个附加的参数(下面是第一个参数),最好是两个:
escaped:如果URI字符序列为转义形式,则为true。否则为假。
charset:要进行转义编码的字符集字符串,如果
需要
这将针对该类中未折旧的构造函数。因此理想的用法是这样的:
1
| new URI( [string], true, StandardCharsets.UTF_8.toString() ); |
在游戏中有些疯狂(11年后才出现头发-egad!),但我希望这对其他人有帮助,尤其是如果远端的方法仍期望使用URI,例如org.apache.commons.httpclient.setURI()时。