基本概念

  • 字符:是各种文字和符号的总称,包括各个国家的文字,标点符号,图形符号,数字等。
  • 字符集:字符集是多个符号的集合,每个字符集包含的字符个数不同。
  • 字符编码:字符集只是规定了有哪些字符,而最终决定采用哪些字符,每一个字符用多少字节表示等问题,则是由编码来决定的。计算机要准确的处理各种字符集文字,需要进行字符编码, 以便计算机能够识别和存储各种文字。

常见的编码表

ASCII:美国标准信息交换码

8 个二进制位就组合出 256 种状态
ASCII码一共规定了128个字符的编码,这 128个符号(包括32个不能打印出来的控制符号),只占用了一个字节的后面7位,最前 面的1位统一规定为0。

ISO8859-1:拉丁码表

欧洲码表,用一个字节的8位表示。

GB2312:中国的中文编码表

最多两个字节编码所有字符

GBK

中国的中文编码表升级,融合了更多的中文文字符号。最多两个字节编码。
GBK等双字节编码方式,用最高位是1或0表示两个字节和一个字节

Unicode:国际标准码

融合了目前人类使用的所有字符。为每个字符分配唯一的字符码。所有的文字都用两个字节来表示。
Unicode不完美,这里就有三个问题,
第一个问题,我们已经知道,英文字母只用一个字节表示就够了,如果 unicode统一规定,每个符号用三个或四个字节表示,那么每个英文字母前都必然有二到三个字节是0,这对于存储空间来说是极大的浪费。
第二个问题是如何才能区别Unicode和ASCII?计算机怎么知道两个字节表示一个符号,而不是分别表示两个符号呢?
第三个,如果和GBK等双字节编码方式一样,用最高位是1或0表示两个字节和一个字节, 就少了很多值无法用于表示字符,不够表示所有字符。

UTF-8

变长的编码方式,可用1-4个字节来表示一个字符。
UTF-8是Unicode编码集的具体实现方案
image.png