Encoding

字符集和字符编码

字符集:字符的集合

字符编码:字符集中的字符映射到数字序列的方式

为什么计算机需要编码

  • 磁盘使用凸起/凹陷存储数据
  • 内存使用有电荷/无电荷
  • 显示器不同颜色的二极管分别亮或灭

二进制是为了处理这些情况抽象出来的数学逻辑

字的编码

  • 字形码: 屏幕上最终展示的字
  • 机内码: 计算机内部存储的字符格式

字形码=机内码+字体, 换句话说, 机内码是对字形码的一种压缩

字符编码演化

ASCII

一个字节,最高位0,剩下7位表示127个字符,控制字符和英文数字字符

ISO-8859系列

ASCII+欧洲字符

Unicode

一套字符编码体系,涵盖抽象字符集、编号、逻辑编码、编码实现

可以容纳世界上所有国家的文字和符号,其编号范围是0-0x10FFFF,有1,114,112个码位,现已定义的码位有238,605个

UTF-16

Unicode最开始设计位双字节编码,固定16位表示一个字符,后来发现不够用,修改为变长编码,常用字符使用2字节,不常用字符使用4字节

UTF-8

UTF-8是变长编码,范围1-4字节

UTF-16不兼容ASCII,UTF-8兼容ASCII

GB系列

GB2312

双字节编码,两个大于 127 的字节连在一起来共同表示一个汉字

由__区位码__和__国标码__组成

可容纳字符数过少

GBK

国标扩展

双字节编码,字符数=2*GB2312

GB18030

强制性标准,现在在中国大陆销售的软件都支持

Unicode的一种实现,兼容GB系列,是GB2312、GBK的超集


参考资料

一文读懂字符编码

Unicode 和 UTF-8 有何区别? - 知乎