1、编码与解码
1.1、介绍
编码按适用范围可以简单分为:
- 美国编码(ASCII)
ASCII为基础编码,来源于美国;
其它编码都兼容ASCII编码; - 欧盟编码(ISO8859-1、WINDOWS-1252)
先是ISO-8858-1,后升级为WINDOWS-1252。两者互不兼容。 - 中华编码(GB2312、GBK、GB18030)
先是GB2312,接着GBK,最后是GB18030。字符数量依次扩容。 - 中国繁体编码(BIG5)
BIG5,主要用于港澳台。 - 世界编码(UNICODE)
世界编码:UNICODE,可以包括全世界所有编码,理论上可以存100多万字符。世界通用。不完全兼容基它编码。如BIG5编码的文件,用UNICODE打开后仍是乱码,但UNICODE可以显示繁体,要以UNICODE保存并打开。
1.2、URL编码
-
URL编码是编码算法,不是加密算法
-
URL编码的目的是把任意文本数据编码为%前缀表示的文本,便于浏览器和服务器处理
-
URL编码是浏览器发送数据给服务器时使用的编码,它通常附加在URL的参数部分
例如:
https://www.baidu.com/s?wd=%E4%B8%AD%E6%96%87
之所以需要URL编码,是因为出于兼容性考虑,很多服务器只识别ASCII字符。但如果URL中包含中文、日文这些非ASCII字符怎么办?不要紧,URL编码有一套规则:
- 如果字符是
A
`Z`,`a`z
,0
~9
以及-
、_
、.
、*
,则保持不变; - 如果是其他字符,先转换为UTF-8编码,然后对每个字节以
%XX
表示。
例如:字符
中
的UTF-8编码是0xe4b8ad
,因此,它的URL编码是%E4%B8%AD
。URL编码总是大写。 - 如果字符是
-
Java标准库提供了一个==URLEncoder.encode()==类来对任意字符串进行URL编码:
//编码
String encoded = URLEncoder.encode("中文!", StandardCharsets.UTF_8);
URLEncoder
把空格字符编码成+
,而现在的URL编码标准要求空格被编码为%20
,不过,服务器都可以处理这两种情况
- 解码URLDecoder.decode
//解码
String decoded = URLDecoder.decode("%E4%B8%AD%E6%96%87%21", StandardCharsets.UTF_8);
1.3、Base64编码
-
Bas