从ASCII码到UTF-8

ASCII码(American Standard Code for Information Inerchange),是基于拉丁字母用于显示现代英语和其他西欧语言的计算机编码系统。
计算机这个学科是从美国发展起来的,20世纪二战之後,美国超越法国、德国成为全球科技中心,美国的通用语言是英语,而代表当时最发达生产力的西方世界对计算机使用英语是没有抵触的,因此信息交换标准代码采用美国英语字符发表时在1967年,解决在电子计算机中数据在存储和运算时使用二进制数表示的符号编码一致性,避免相互通信之间造成的信息混乱。
标准ASCII码(也称基础ASCII码)使用一个字节中的7位元,表示美式英语中使用的特殊控制符、标点符号、大写字母、数字和小写字母,最高位元常用作奇偶效验,是在代码传送过程中检验是否出现错误的一种方法。1986年ASCII规范最後一次更新,定义所有的128个字符(即ANSI字符集,ISO 8859-1-1987),新规范使用全部8位元,当最高位元为1时可增加128个字符,这些字符成为Extended ASCII,扩展ASCII码允许将附加的128个字符用于特殊字符、外来语字符和图形符号,譬如法语中字母上方的注音符号,欧洲国家使用256个的字符扩展ASCII码作为编码体系指定各自的标准,但基本ASCII码的规范保持一致。
20世纪80年代亚洲国家引进西方计算机技术,由于东亚、西亚地区的文字符号远远超过256个字符,ASCII码的字符数量局限性被暴露出来,各国首先通过增加字节数量来满足字符数量上的要求,用两个字节表示一个符号,字节最高元置1区别于标准ASCII码,然後跟随第二个字节,因此理论上可表示128*256=32768个字符,其中有中国大陆的GB2312简化汉字码,中国台湾地区的BIG5繁体汉字码,日本电脑的Shift_JIS码,在整个世界范围内出现了数百中编码方案。
在创建UNICODE标准前,对软件开发者而言,基于一个国家编码方案开发的程序移植到另一个国家,标准ASCII码之外的字符转换经常出现错误,必须重新检查修改,因此世界需要统一的编码标准替代上百种相互冲突的字符编码方式。1991年诞生了第一个Unicode版本,为世界上所有的字符设置一个唯一的码点CodePoint,通过这个整数ID来访问和操作字符。世界各国多个语种的字符放在UCS(Universal character Set)中形成了多语种字符集,一个平面字符集由两个字节表示,可容纳256*256=65536个字符,其中0号平面为基本多语种平面,其余为辅助多语种平面。
UTF(Unicode Transformation Format)针对基本多语种平面字符可采用UTF-16编码格式,即用两个字节表示。对于辅助多语种平面字符则需采用UTF-32编码格式,即四个字节表示。由于不同计算机体系结构采用的字节排列顺序不同,UTF-16、UTF-32编码格式分别有big-endian和little-endian两种结构,为了避免与基本ASCII码发生冲突,UTF-16、UTF-32编码格式必须加上前置字符说明以示区别。
UTF-8(eight bit Unicode transformation format),汤普逊Thompson和罗布-派克Rob Pike一起开发基于UNIX的新操作系统Plan 9,作为工作的一部分他们创造了UTF-8这种可变长度的字符编码,1992年9月在新泽西州一列餐车上描绘出UTF-8设计要点。UTF-8可以用来表示Unicode标准中的任何字符,而且其编码中的第一个字节仍与基本ASCII码相容,使得原来处理ASCII字符的软件无需变动,或者进行少部分修改後即可继续使用。

从ASCII码到UTF-8_第1张图片


UTF-8有单字节、双字节、三字节和四字节四种结构,单字节采用7位元的ASCII码,最高有效位元为0,其他三种结构第8位最高有效元均置1,区别于标准ASCII码,使原ASCII码成为UTF-8编码格式的一个真子集。UTF-8多字节变长结构可以容纳除基本平面外所有辅助平面的字符数量,而且具有编码自我同步特点,即不必从字串的首字节读取,也能找到字符间的分界,同时规避不同架构中字节排列顺序的结构问题。
UTF-8编码已发展成为当今计算机和网路世界中通用的字符编码格式。
 

你可能感兴趣的:(编程语言,c语言)