文章目录
概念
- 字符:文字和符号的统称
- 字符集:字符对应的编码,类似字典
- 编码:将字符集转化为计算机0,1语言
- 字符编码:将计算机的0,1语言与字符集中的字符对应起来
ASCII码
- American Standard Code for Information Interchange (美国标准信息互换码)
- 晶体管有0,1两种状态 =》在原来技术不是很发达的时代,7根可有27=128个状态,美国字符足够了,最经济 =》标准7位ASCII码
-
0 - 31:控制字符
-
32 - 126:打印字符
48 - 57:0 - 9 65 - 90:A - Z 97 - 122:a - z
-
28 => 扩展ASCII码:256个状态
- 单字节,8位表示一个字符
中文字符集
GB2312
- 吸收了ASCII的128个状态,这128个保持单字节不变(半角)
- 剩下的中文,日文等用16位表示一个字符,为双字节(全角)
GBK
- 扩展了GB2312,加上了2000多繁体字
GB18030
- 再次扩展
DBCS(Double Bytes Character Set,双字节字符集)
- 除了ASCII外,其他字符都占双字节
Unicode
-
统一字符集,万国码,单一码
-
所有都是16位,ASCII码前加8个0
-
Unicode:216 = 65536 , 其中中文19968 - 40869(十六进制 \u4E00 - \u9FA5)
UTF(Unicode的编码方式)
- UTF-8:可变字节编码,网络传输中常用,但解码较复杂
- UTF-16:基本等同于Unicode,编码效率最高,适合本地。不够经济,不适合网络传输
- UTF-32: 4字节,不普及
UTF-8
- 一个一个字节的读,根据bit标志识别是几个字节的字符
- 其中,0 - 127:一个字节,127 - 2047:两个字节,2048 - …:三个字节
- ASCII:一个字节,中文:三个字节
UTF-8 编码过程
假设文本为“aà一”
- 获取十六进制编码为
61 C3 A9 E4 B8 80 - 计算二进制编码
01100001
11000011
10100001
11100100
10111000
10000000 - 根据UTF-8规则分组
01100001 (第一组 0=》ASCII)
11000011 (第二组 110+10=》两个字节)
10100001
11100100 (第三组 1110+10+10=》三个字节)
10111000
10000000 - 重新计算,删除bit标志,不足16位高位补0
0000000001100001
0000000011100001
0100111000000000 - 根据Unicode反查出结果
URL编码
Http协议中参数的传输是"key=value"这种键值对形式的,如果要传多个参数就需要用“&”符号对键值对进行分割。如"?name1=value1&name2=value2",这样在服务端在收到这种字符串的时候,会用“&”分割出每一个参数,然后再用“=”来分割出参数值。浏览器对url中传入的符号进行编码,避免与=,&等符号混淆。