Unicode 理解

发展历史

ASCII 码 Ascii 码对照表

  • 利用8个可以开关的晶体管表示不同的状态,可以组合出来的状态总共有2^8,也就是256种状态,十六进制表示为0x00 ~ 0xFF
  • 0(0x00)开始的32(0x10)种状态 规定特殊用途,比如换行(0x10),嘟嘟声(0x07),后来继续编写到127(0x7F)号表示所有的字母数字和标点,后来这种编码被称为 ASCII(American Standard Code for Information Interchange 美国信息互换标准代码) 编码
  • 后来为了满足一些西方国家的需求,继续把后面的128(0x80) ~ 255(0xFF)继续进行编码,形成了 ASCII 码的扩展字符集,至此,一个字节8位所能表示的状态全部被使用完。

GB2312

  • 小于127的字节还是和原来表示的意义一样,大于127的编码全部干掉
  • 两个大于127的字节组成一个汉字,分为高低字节,高字节使用0xA1 ~ 0xF7,低字节使用0xA1 ~ 0xFE,可以组合出86 * 937998种情况,包括了 7000 多个简体汉字,数学符号,罗马希腊的字母,日文的假名,并称之为 全角 字符,占用两个字节,小于127的字叫做半角字符,占用一个字节

GBK, GB18030

由于中国文化的博大精深,我们又把繁体字的编码也加了进来,规定只要第一个字节的码大于127,就表示一个汉字的开始,不用后面一个字节值要大于127,这种编码集称之为GBK编码集;后来又增加了一些少数名族的字符,扩展称为了GB18030字符集

DBSC

上面 GB 相关字符集后来统称为 DBSC (Double Byte Charecter Set) 双字节字符集,认为只要有字节值是大于 127 字节出现,就代表一个汉字。这套标准的特点是把一个字节长的英文字符和两个字节长的中文字符统一到了一个字符集里面;然后就出现了后来的 一个汉字占两个字节,一个英文占一个字节 的必背知识

标准化,Unicode 的出现

由于各个地区的语言的差异,后来导致了很多字符编码规范,后来一个叫做ISO的国际组织决定着手解决这个问题,决定废掉所有的地方编码规范,新建一个叫做Universal Multiple-Octet Coded Character Set,简称USC,俗称Unicode

  • 一个字符统一使用两个字节表示,ASCII编码保持不变,只是在高位字节补 8 个 0
  • 字符是文化相关符号,字节是一个 8 位的物理存贮单元

Unicode 的问题

  • 空间浪费
  • 不能和 ASCII 码区分开来

UTF-8, UTF-16

为了解决 unidcode 在网络空间传输空间浪费的问题,出现了 UTF(UCS Transfer Fommat) 标准

  • UTF-8 一次使用 8 个位传输数据,使用变长的编码方式,会采用 1-4 个字节来表示一个字符,英文字符采用 1 个字节,中文字符则采用 3 个字节
  • UTF-16 一次使用 16 个位传输数据

参考

参考

上次更新: 8/27/2018, 7:58:18 PM