不推荐使用java.net.URLEncoder.encode(String),我应该使用什么呢?

Fra*_*ger 185 java url network-programming deprecated

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

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

我应该用什么呢?

Wil*_*ner 270

使用URLEncoder中的其他encode方法:

URLEncoder.encode(String, String)
Run Code Online (Sandbox Code Playgroud)

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

System.out.println(
  URLEncoder.encode(
    "urlParameterString",
    java.nio.charset.StandardCharsets.UTF_8.toString()
  )
);
Run Code Online (Sandbox Code Playgroud)

  • 然后你必须处理UnsupportedEncodingException,即使在任何地方都应该支持UTF-8. (29认同)
  • @jsh:我很困惑,为什么不应该有一个URLDecoder?为什么这会让Java膨胀?这些是静态方法.输入任何一种都需要花费相同的努力.如果你喜欢Python,你为什么要用Java编程?是因为更多的人使用Java而不是Python而且你得到的是Java作业而不是Python作业? (13认同)
  • 他称之为臃肿,因为它占据了全局类命名空间.为什么有URLEncoder.encode和URLDecoder.decode,你可以有URL.encode和URL.decode,甚至只有URLEncoder.decode?为什么要把它全部多余和臃肿?因为它的java. (10认同)
  • @tc.:Java 7引入了这些常量:`StandardCharsets.US_ASCII`,`StandardCharsets.UTF_8`等.不幸的是,`URLEncoder.encode`不接受`Charset` ...(但许多其他的方法都可以). (8认同)
  • 次要建议 - 使用`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()`方法. (7认同)
  • @stepanian是的,你得工作的地方.我通常使用的python包将所有这些编码和解码实用程序放在一个屋檐下.我主要添加了这个评论,因为我必须去找到URLDecoder,我认为它可能会节省几分钟,知道这是必需的. (2认同)
  • 因此,我们现在不再使用简单的编码方法,而是使用一种更长、更痛苦的方法来抛出异常。为什么它不能默认为最小公分母,这不像我正在加密任何东西。谁决定做出这一改变,就应该在膝盖上挨一箭。 (2认同)

Atu*_*rne 28

你应该使用:

URLEncoder.encode("NAME", "UTF-8");
Run Code Online (Sandbox Code Playgroud)


Jor*_*sys 22

使用URLEncoder类:

URLEncoder.encode(String s, String enc)
Run Code Online (Sandbox Code Playgroud)

地点:

s - 要翻译的字符串.

enc - 支持的字符编码的名称.

标准字符集:

US-ASCII 七位ASCII,又名ISO646-US,又称Unicode字符集的基本拉丁语块ISO-8859-1 ISO拉丁字母第1号,又名ISO-LATIN-1

UTF-8八位UCS转换格式

UTF-16BE 16位UCS转换格式,大端字节顺序

UTF-16LE 16位UCS转换格式,little-endian字节顺序

UTF-16 16位UCS转换格式,由可选的字节顺序标记标识的字节顺序

例:

import java.net.URLEncoder;

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