常用字符集

2016/05/07 Coding

字符集为了给每个文字符号编码以便于计算机识别处理而产生的。自20世纪60年代初,美国标准化组织ANSI发布了第一个计算机字符集——ASCII依赖,各大计算机公司、各国政府、标准化组织等先后发明了几百种字符集。以下总结一些常用字符集,及其历史渊源(参考《深入浅出MySQL(第2版)》第9章 字符集)。

ASCII

该字符集最终演化成ISO-646。采用7位编码,定义了包括大小写英文字母、阿拉伯数字和标点符号,以及33个控制符号。

ASCII

Unicode

  • 要说Unicode得先说ISO-10646。后者是ISO国际化标准组织提出的用4字节编码的字符集,简称为UCS-4。具体编码规则是:
    • 代码空间划分为组(group)、面(plane)、行(row)和格(ceil);
    • 第1到4个字节分别代表组、面、行、格;
    • 字符编码的第32位必须为0;
    • 每个面的最后两个码位0xFFFE和0xFFFF保留不用; ISO-10646共有128个群组(0~0x7F),每个群组有256个面,每个面有256行,每行包括256格。共有128*256=32768个面,每个面有256*256-2=65534个码位,合计32768*65534 = 2147418112个码位。
  • Unicode字符集是Xerox公司为反对ISO-10646而联合Apple/IBM/DEC/Sun/Microsoft/Novell等公司提出的以16位编码的字符集。

  • Unicode最终和ISO-10646达成协议,Unicode编码并入ISO-10646的0组0字面内,叫做基本多语言文字面(Basic Multi-lingual Plane, BMP)。为了解决Unicode无法表示BMP外的字符。Unicode提出了名为UTF-16的解决方案,而UTF则是UCS/Unicode Transformation Format的缩写。

  • 由于当时的网络世界还是ASCII的天下,只能处理单字节数据流。Unicode又提出UTF-8解决方案,按一定规则将ISO-10646或Unicode字符转成1~4个字节。

汉字的GB

  • GB2312-80: 全称《信息交换用汉子编码字符集 基本集》,双字节编码,收录6763个常用汉字和682个非汉字图形符号。
  • GBK: 全称《汉字内码扩展规范》,在GB2312的基础上扩充。并不是强制性国家标准,但由于Win95的支持而大为流行。
  • GB18030:全称《信息技术信息交换用汉字编码字符集、基本集的扩充》,根据ISO10646编写,采用2字节或4字节编码。

小结

字符集 是否定长 编码方式 其他说明
ACSII 单字节7位编码 最早的奠基性字符集
ISO-8859-1/latin1 单字节8位编码 西欧字符集,经常被用来转码
GB2312-80 双字节编码 早期标准,不推荐使用
GBK 双字节编码 虽然不是国标,但支持的系统不少
GB18030 2字节或4字节编码 开始有一些支持,但数据库支持的还少见
UTF-32 4字节编码 UCS-4原始编码,目前很少使用
UCS-2 2字节编码 Windows 2000 内部使用UCS-2
UTF-16 2字节或4字节编码 Java和WindowsXP/NT等内部使用
UTF-8 1~4字节编码 互联网和Linux广泛支持的Unicode字符集

Search

    Post Directory