代码揭秘:汉字编码和Unicode编码

ASCII码仅用7、8位就解决了英文字母与常用符号的编码问题,但仅用这么少的位来实现数以万计的汉字编码显然不现实。

由于汉字的编码出现在ASCII码之后,所以汉字编码必须兼容ASCII码。为了解决这两个问题,人们准备采用丙个字节来表示一个汉字。由于ASCII码占用7位的历史原因,所以这种汉字编码方式规定:对于连续的两个字节,只有在两个字节的第7位(最低位从0开始)都是1的情况下,才认为这两个字节合起来表示一个汉字。这样不同长度混排的编码方式,通常被叫“MBCS(Muilti-Bytes Character Set,多字节字符集)”。

使用两个字节来对汉字编码,也可以实现与ASCII码的兼容,这种编码被称作GB2312(国标2312)。因不同国家和地区制定了不同的编码标准(就好像汉字的GB2312一样),如BIG5、JIS等。不同编码之间互不兼容,当信息在国际交流时,无法将属于两种语言的文字存储在同一段编码的文本中,因此,Unicode浮出水面了。

ISO直接规定必须用两个字节,也就是16位来统一表示所有的字符,对于ASCII码里的那些“半角”字符,Unicode保持其编码不变,只是将其长度由原来的8位扩展为16位。这样一来,所有的字符都固定占用两个字节。使用Unicode编码进行存放的字符也被称作宽字节字符。