URLEncoder.encode
是 Java 中用于对字符串进行 URL 编码的工具方法。URL 编码是将字符串中的特殊字符转换为 %
后跟两位十六进制数的形式,以便在 URL 中安全传输。例如,空格会被编码为 %20
,+
会被编码为 %2B
。
方法签名
java
复制
public static String encode(String s, String enc) throws UnsupportedEncodingException
-
s
: 需要编码的字符串。 -
enc
: 字符编码格式(如"UTF-8"
)。 -
返回值: 编码后的字符串。
-
异常: 如果指定的编码格式不被支持,会抛出
UnsupportedEncodingException
。
使用示例
以下是一个简单的示例,展示如何使用 URLEncoder.encode
:
java
复制
import java.io.UnsupportedEncodingException; import java.net.URLEncoder; public class URLEncoderExample { public static void main(String[] args) { try { // 需要编码的字符串 String originalString = "Hello World! @Java"; // 使用 UTF-8 编码格式进行 URL 编码 String encodedString = URLEncoder.encode(originalString, "UTF-8"); // 输出编码后的字符串 System.out.println("Original: " + originalString); System.out.println("Encoded: " + encodedString); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } } }
输出结果
复制
Original: Hello World! @Java Encoded: Hello+World%21+%40Java
编码规则
-
字母和数字:不会被编码。
-
特殊字符:
-
空格会被编码为
+
或%20
。 -
其他特殊字符(如
!
,@
,#
,$
,&
,=
,?
等)会被编码为%
后跟两位十六进制数。
-
-
保留字符:如
:
,/
,?
,&
,=
等,通常也需要编码,除非它们在 URL 中有特殊含义。
注意事项
-
编码格式:
-
必须指定正确的字符编码格式(如
UTF-8
),否则可能会导致乱码。 -
如果不指定编码格式,可能会使用平台默认的编码,这可能导致不一致的结果。
-
-
URL 组成部分:
-
URLEncoder.encode
适用于编码查询参数或路径片段,而不是整个 URL。 -
如果需要编码整个 URL,可以使用
URI
类或第三方库(如 Apache HttpComponents)。
-
-
解码:
-
如果需要解码 URL 编码的字符串,可以使用
URLDecoder.decode
方法。
-
解码示例
java
复制
import java.io.UnsupportedEncodingException; import java.net.URLDecoder; public class URLDecoderExample { public static void main(String[] args) { try { // 编码后的字符串 String encodedString = "Hello+World%21+%40Java"; // 使用 UTF-8 编码格式进行 URL 解码 String decodedString = URLDecoder.decode(encodedString, "UTF-8"); // 输出解码后的字符串 System.out.println("Encoded: " + encodedString); System.out.println("Decoded: " + decodedString); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } } }
输出:
复制
Encoded: Hello+World%21+%40Java Decoded: Hello World! @Java
总结
-
URLEncoder.encode
是 Java 中用于对字符串进行 URL 编码的标准方法。 -
它主要用于编码查询参数或路径片段,以确保 URL 的正确性和安全性。
-
使用时需要指定字符编码格式(如
UTF-8
),以避免乱码问题。 -
如果需要解码,可以使用
URLDecoder.decode
。