17.2.2 使用URLDecoder和URLEncoder
17.2.2 使用URLDecoder和URLEncoder
URLDecoder
和URLEncoder
用于完成普通字符串和application/x-www-Form-urlencoded MIME
字符串之间的相互转换。可能有读者觉得后一个字符串非常专业,以为又是什么特别高深的知识
当地址栏中的关键字包含中文时,这些关键字就会变成”乱码”
例如,在搜索引擎中搜索中秋节这三个中文关键字:
我们在地址栏中看到的是:
1 | https://www.baidu.com/s?wd=中秋节 |
但是如果你复制这个地址,就会得到如图下所示的“乱码”:
1 | https://www.baidu.com/s?wd=%E4%B8%AD%E7%A7%8B%E8%8A%82 |
实际上这不是乱码,这就是所谓的application/x-www-form-urlencoded MIME
字符串。
当URL
地址里包含非西欧字符的字符串时,系统会将这些非西欧字符串转换成类似上面的特殊字符串。编程过程中可能涉及普通字符串和这种特殊字符串的相关转换,这就需要使用URLDecoder
和URLEncoder
类。
URLDecoder
类包含一个decode(String s, String enc)
静态方法,它可以将看上去是乱码的application/x-www-form-urlencode MIME
字符串转换成普通字符串。URLEncoder
类包含一个encode(String s, String enc)
静态方法,它可以将普通字符串转换成application/x-www-form-urlencode MIME
字符串。
URLDecoder decode方法
方法 | 描述 |
---|---|
static String decode(String s) |
Deprecated. The resulting string may vary depending on the platform’s default encoding. |
static String decode(String s, String enc) |
Decodes an application/x-www-form-urlencoded string using a specific encoding scheme. |
static String decode(String s, Charset charset) |
Decodes an application/x-www-form-urlencoded string using a specific Charset. |
URLEncoder encode方法
方法 | 描述 |
---|---|
static String encode(String s) |
Deprecated. The resulting string may vary depending on the platform’s default encoding. |
static String encode(String s, String enc) |
Translates a string into application/x-www-form-urlencoded format using a specific encoding scheme. |
static String encode(String s, Charset charset) |
Translates a string into application/x-www-form-urlencoded format using a specific Charset. |
程序示例 MIME字符串和普通字符串的相互转换
下面程序示范了如何将上面的地址栏中的“乱码”转换成普通字符串,并示范了如何将普通字符串转换成application/x-www-fom-urlencode MIME
字符串
1 | import java.net.*; |
上面程序用于完成普通字符串和application/x-www-Form-urlencoded MIME
字符串之间的转换。运行上面程序,将看到如下输出:
1 | 解码后得到:中秋节 |
哪些字符串需要转换
只有包含西欧字符的普通字符串和application/x-www-fom-urlencode MIME
字符串无须转换,而包含中文字符的普通字符串则需要转换,转换方法是每个中文字符占两个字节,每个字节可以转换成两个十六进制的数字,所以每个中文字符将转换成“%XX%XX
”的形式。当然,采用不同的字符集时,毎个中文字符对应的字节数并不完全相同,所以使用URLEncoder
和URLDecoder
进行转换时也需要指定字符集。