Java URLDecoder和URLEncoder

        URLDecoder和URLEncoder用于完成普通字符串和application/x-www-form-urlencoded MIME字符串之间的相互转换。

https://www.baidu.com/s?ie=UTF-8&wd=%E4%BD%A0%E5%A5%BD

        当URL地址里包含非西欧字符的字符串时,系统会将这些非西欧字符串转换成看似乱码的特殊字符串。编程过程中可能涉及普通字符串和这种特殊字符串的相关转换,这就需要使用URLDecoder和URLEncoder类。


➢ URLDecoder类包含一个decode(String s, String enc)静态方法,它可以将看上去是乱码的特殊字符串转换成普通字符串。


➢ URLEncoder类包含一个encode(String s, String enc)静态方法,它可以将普通字符串转换成application/x-www-form-urlencoded MIME字符串。

参数解释:
        s - 要转换(/被转换)的String。
        enc – 支持的字符编码(/解码)的名称。

对字符串进行编码时,适用以下规则:

  • 字母数字字符“ a ”到“ z ”、“ A ”到“ Z ”和“ 0 ”到“ 9 ”保持不变。
  • 特殊字符“ . ”、“ - ”、“ * ”和“ _ ”保持不变。
  • 空格字符“”被转换为加号“ + ”。
  • 所有其他字符都是不安全的,首先使用某种编码方案将其转换为一个或多个字节。 然后每个字节由 3 个字符的字符串“ %xy ”表示,其中xy是字节的两位十六进制表示。 推荐使用的编码方案是 UTF-8。 但是,出于兼容性原因,如果未指定编码,则使用平台的默认编码。

        

例如:

        使用 UTF-8 作为编码方案,

                字符串“The string ü@foo-bar”

将被转换为

                “The+string+%C3%BC%40foo-bar”,

        因为在 UTF-8 中,字符 ü 被编码为两个字节 C3(十六进制)和 BC(十六进制),字符 @ 被编码为一个字节 40(十六进制)。

提示:

        仅包含西欧字符的普通字符串和application/x-www-form-urlencoded MIME字符串无须转换,而包含中文字符的普通字符串则需要转换,转换方法是每个中文字符占两个字节,每个字节可以转换成两个十六进制的数字,所以每个中文字符将转换成“%XX%XX”的形式。当然,采用不同的字符集时,每个中文字符对应的字节数并不完全相同,所以使用URLEncoder和URLDecoder进行转换时也需要指定字符集。

测试:

        try {
            //你好
            System.out.println(URLDecoder.decode("%E4%BD%A0%E5%A5%BD", "utf-8"));
            //%E4%BD%A0%E5%A5%BD
            System.out.println(URLEncoder.encode("你好", "utf-8"));
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }


Guess you like

Origin blog.csdn.net/qq_40100414/article/details/120547846