程序就是数据结构+算法,还有个重要的问题,就是编码!编码是信息从一种形式或格式转换为另一种形式的过程,有诸如字符/文字/语义/PCM等多种编码。
这篇文章只限于字符编码(Character encoding),作为程序员或是多数计算机工作者,你可能研究或看过很多编码ASCII/GB(K)/Unicode(utf8/utf16/utf32)/BIG5/ISO等,但还未搞清楚它到底是什么东东,它们有什么区别和联系,if so,可以继续看下文啦。

简约的前置总结:ASCII是美标,用一个字节表示字母/符号;GBK是国标,用两个字节表示汉字;UTF-8是UNICODE的改进版,兼容几乎所有语言符号,最为流行通用。

ASCII,美国信息交换标准编码,简称“美标”。大家知道,美国抢占了计算机与互联网的先机,美标自然地成为了国际上大部分电脑的通用编码,它规定用从0到127的128个数字来代表信息的规范编码,其中包括33个控制码、1个空格码、94个形象码(英文字母,阿拉伯数字,标点符号等)。我们平时阅读的英文电脑文本,就是以形象码的方式传递和存储的。

GB2312,老美的美标虽通用,但不适合博大精深的中文。1981年我国开始实施的一套国家标准GB2312,把六千余汉字、标点符号、外文字母等,整个字符集分成94个区,每区有94个位。例如“中”字在方阵中处于第54区第48位,它的区位码就是5448。然而GB编码文字较少,致使GBK的出现。

GBK,国G标B扩展K,向下兼容GB-2312编码,向上支持ISO 10646.1国际标准,共收录汉字21003个、符号883个、提供1894个造字码位,简、繁体字融于一库。GBK 采用双字节表示,总体编码范围为 8140-FEFE,首字节在 81-FE 之间,尾字节在 40-FE 之间,剔除 xx7F 一条线。总计23940个码位,共收入 21886 个汉字和图形符号。(另外,BIG5码是针对繁体汉字的汉字编码)
ISO1993年,国际标准ISO10646 定义了通用字符集(Universal Character Set, UCS)。 UCS 是所有其他字符集标准的一个超集。

UNICODE的渊源:中日韩等国家使用的语言中字符多达几千个,当计算机普及到此时,原来字符采用的单字节编码(最多只可容纳2^8=256个字符),既然一个字节不够,人们就采用两个字节,但其中的ASCII码等仍用单字节表示。问题出现了:因为每当涉及到双字节字符串的处理时,总是要判断当中的一个字节到底表示的是一个字符还是半个字符,如果是半个字符,那是前一半还是后一半?
最后两个标准组织合作使Unicode诞生,Unicode对每个字符都固定使用两个字节即16位表示,于是当处理字符时,不必担心只处理半个字符。Unicode在网络、Windows系统和很多大型软件中得到应用。

UTF-8:为了提高等宽字节的Unicode的编码效率,于是出现了UTF-8编码,也是迄今为止最为通用流行的编码,UTF-8可以根据不同的符号自动选择编码的长短。比如英文字母可以只用1个字节就够了。UTF-8的编码是这样得出来的,以”汉”这个字为例:
“汉”字的Unicode编码是\u6c49,然后把\u6c49通过UTF-8编码器进行编码,最后输出的UTF-8编码是汉

未完待续。。。

标签: none

添加新评论