首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 其他教程 > 互联网 >

中文化和国际化有关问题权威解析之一:字符编码发展历程

2012-10-23 
中文化和国际化问题权威解析之一:字符编码发展历程?单字节编码的发展在80年代早期,一些现在流行的标准(如I

中文化和国际化问题权威解析之一:字符编码发展历程

?

单字节编码的发展

在80年代早期,一些现在流行的标准(如ISO 8859Unicode)还未出现。那时为了支持多种地区的语言,各大组织机构或IT厂商开始发明它们自己的编码方案,以便弥补ASCII编码的不足。一时间,各种互不相容的字符编码方案成百花齐放之势。

为了避免混乱,ISO组织在1998年之后,陆续发表了一系列代号为8859的标准,作为ASCII编码的标准扩展,终于统一了单字节的西方字符的编码。ISO是设在瑞士的国际标准化组织的简称(International Organization for Standardization)。

?

?

UCS中,目前只有00组是重要的,Unicode学术学会断言,在可以预见的将来,甚至不可能用完00组中的前17个平面(00平面到10平面)。因此,Unicode只定义了ISO 10646的第00组的前17个平面。事实上,目前绝大多数字符,都分配在第00平面BMP中。

?

下表中列出了BMP中的字符分配情况:

?

UTF-8字节组合(二进制)

0000 0000 —— 0000 007F

0xxxxxxx

0000 0080 —— 0000 07FF

110xxxxx 10xxxxxx

0000 0800 —— 0000 FFFF

1110xxxx 10xxxxxx 10xxxxxx

0001 0000 —— 001F FFFF

11110xxx 10xxxxxx 10xxxxxx 10xxxxxx

0020 0000 —— 03FF FFFF

111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx

0400 0000 —— 7FFF FFFF

1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx

UTF-8内,

1. 如果一个字节,最高位(第8位)为0,表示这是一个ASCII字符(00 - 7F)。可见,所有ASCII编码已经是UTF-8了。

2. 如果一个字节,以11开头,连续的1的个数暗示这个字符的字节数,例如:110xxxxx代表它是双字节UTF-8字符的首字节。

3. 如果一个字节,以10开始,表示它不是首字节,需要向前查找才能得到当前字符的首字节。

可见UTF-8可以有效地保证数据的完整性,避免出现编码的错位。即使偶然出现“坏字”,也不会影响到后续的文本。

那么UTF-8有什么缺点呢?显然,对于在BMP中的中文字来说,需要用3个字节才能表示,比使用UTF-16或直接使用双字节的GB2312编码大了0.5倍。

?

上文说了一大通,总结一下,其实很简单:

  1. 字符编码是抽象字符在计算机中的数字表示。
  2. 字符编码集(character set,简称字符集)是一批字符编码的集合。世界上存在大量互不兼容的字符集,给国际交流带来了困难。
  3. ASCII码是最古老的字符编码,它总共只定义了7位共128个字母、数字和符号。但它是其它所有字符编码的基础。
  4. Unicode用16位整数编码,将世界上所有主要文字的字符统一起来了。如果利用代理对(surrogate pair)最多可以表示从0到1FFFF的字符。然而绝大多数情况下,只需要用到0到FFFF之间的字符就足够了。
  5. Unicode常用UTF-8UTF-16来表示。7位的ASCII码不用作任何变化,就已经是UTF-8了。但UTF-8需要用3个字节来表示一个汉字。
  6. ISO 8859系列字符集,定义了单字节字符编码的标准。其中最特殊的是ISO-8859-1编码,它的编码和Unicode中最开始的256个字符编码完全相同。
  7. GB18030编码是中国大陆的国家标准,在字汇上等同于Unicode,在编码上和GB2312编码以及GBK编码兼容。

热点排行