编码笔记

概念

  • 字符:文字和符号的统称
  • 字符集:字符对应的编码,类似字典
  • 编码:将字符集转化为计算机0,1语言
  • 字符编码:将计算机的0,1语言与字符集中的字符对应起来

ASCII码

  • American Standard Code for Information Interchange (美国标准信息互换码)
  • 晶体管有0,1两种状态 =》在原来技术不是很发达的时代,7根可有27=128个状态,美国字符足够了,最经济 =》标准7位ASCII码
  1. 0 - 31:控制字符

  2. 32 - 126:打印字符

    	48 - 57:0 - 9
    	65 - 90:A - Z
    	97 - 122:a - z
    
  3. 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的编码方式)

  1. UTF-8:可变字节编码,网络传输中常用,但解码较复杂
  2. UTF-16:基本等同于Unicode,编码效率最高,适合本地。不够经济,不适合网络传输
  3. UTF-32: 4字节,不普及

UTF-8

  • 一个一个字节的读,根据bit标志识别是几个字节的字符
  • 其中,0 - 127:一个字节,127 - 2047:两个字节,2048 - …:三个字节
  • ASCII:一个字节,中文:三个字节

UTF-8 编码过程

假设文本为“aà一”

  1. 获取十六进制编码为
    61 C3 A9 E4 B8 80
  2. 计算二进制编码
    01100001
    11000011
    10100001
    11100100
    10111000
    10000000
  3. 根据UTF-8规则分组
    01100001 (第一组 0=》ASCII)
    11000011 (第二组 110+10=》两个字节)
    10100001
    11100100 (第三组 1110+10+10=》三个字节)
    10111000
    10000000
  4. 重新计算,删除bit标志,不足16位高位补0
    0000000001100001
    0000000011100001
    0100111000000000
  5. 根据Unicode反查出结果

URL编码

Http协议中参数的传输是"key=value"这种键值对形式的,如果要传多个参数就需要用“&”符号对键值对进行分割。如"?name1=value1&name2=value2",这样在服务端在收到这种字符串的时候,会用“&”分割出每一个参数,然后再用“=”来分割出参数值。浏览器对url中传入的符号进行编码,避免与=,&等符号混淆。

编码笔记