[四年前的博客了,干得漂亮]
最初的字符集7bit, 共128种,后来出现了ASCII, America Standard Code for Information Interchange,IBM扩展的,8bit, 256种。
ANSI:ASCII以及其扩展集,如GB2312。正式名称为MBCS,Multi-Byte Character System,但通常称为ANSI。
扩展集太多了,不便于交流,产生了Unicode,Universal Multiple-Octet Coded Character Set,32bit, 65536种。
标准的Unicode称为UTF-16, UCS(Universal Character Set) Transformation Format,就是32bit, 65536种。
由于许多系统已经采用了单字节传输,所以出现了UTF-8,它可以对Unicode进行编码。
如,“连通”两个字的Unicode为:DE 8F 1A 90
进行UTF-8编码后为:E8 BF 9E E9 80 9A
看到,Unicode每个汉字对应32bit, UTF-8每个汉字对应48bit....
UTF-8, 8bit编码, ASCII不作变换, 其他字符做变长编码, 每个字符1-3 byte. 通常作为外码. 有以下优点:
与CPU字节顺序无关, 可以在不同平台之间交流
容错能力高, 任何一个字节损坏后, 最多只会导致一个编码码位损失, 不会链锁错误(如GB码错一个字节就会整行乱码)
UTF-16, 16bit编码, 是变长码, 大致相当于20位编码, 值在0到0x10FFFF之间, 基本上就是unicode编码的实现. 它是变长码, 与CPU字序有关, 但因为最省空间, 常作为网络传输的外码.
UTF-16是unicode的preferred encoding.