精确解释Unicode

我决心了解一下编码知识——主要是Unicode——及相关概念,搜索阅读了网上的很多文章,明白了一些,另一些却很模糊,而且有一些不同文章的描述是冲突的!我因此查阅了很多网上的资料,主要有中英文维基百科和Unicode.org,终于明白了其中的奥妙。

独乐乐不如众乐乐,我因此撰此文帮助大家最大程度地厘清UnicodeUCSUTF-8UTF-16UCS-2UCS-4之间的关系。对于网上随手可得的资料,如ASCII码表、UTF-16算法的程序代码,则不是本文重点。

网上其他文章概念模糊、说法冲突,我觉得一是上述词语本身就具有多重含义,很难把握;二可能是作者本身理解不到位,含糊了过去;三可能是那些文章缺少精确的表达方式,很容易使人误解。于是,我选择了用数学及程序代码相结合的方式,试图给予最清晰的定义。

我水平亦有限,哪里理解不到位或表达不清楚,希望读者不吝赐教。

这里格式我不修改了,嫌格式不漂亮的朋友可去https://docs.google.com/viewer?a=v&pid=explorer&chrome=true&srcid=0B92-FAjNvVzGNGQxNGI2MzctZGJlMC00YzhmLTg3MWItMGI0MWVhOTM4M2I4&hl=zh_CN 获取PDF版。

基本概念

字符是文字与符号的总称,包括文字、图形符号、数学符号等。字符集是字符的集合。

(字符)编码当名词用,是一个从一指定字符集一指定集合的函数,如果用程序代码1来表示,可以写作Encoding

编码当动词用,是建立一个从一指定字符集一指定集合的函数。例如将汉字对应到整数(Encoding ),将英文字母对应到可在电线中传输的电脉冲(Encoding 电脉冲模式>)。

如果字符编码特化为Encoding ,即字符转换为整数,则成为编码字符集(函数是特殊的集合)。很多文章上说的字符集其实是编码字符集。

码点是编码字符集的上域2中的一个元素。

为了本文的叙述方便,额外定义几条表达方式。

编码字符集有以下属性:

  • 字库3ASCII的字库是英文字母+数字+其他一些符号 1

  • 编码长度4ASCII的编码长度是7个二进制位。编码长度≤表示长度 2

  • 表示长度5ASCII的表示长度是8个二进制位(最高位为0 3

编码字符集ASCII中字符A的编码数字是656 4

编码字符集ASCII中字符A的二进制流是01000001。相应地,十六进制流是41,十进制流是65。与编码数字不同,N进制流要开头补0,以达到表示长度。 5

常见的编码字符集

GB2312是简体字集,全称为GB2312(80)字集,共包括国标简体汉字6763个。

BIG5大五码是台湾繁体字集,共包括国标繁体汉字13053个。

GBK是简繁字集,包括了GB字集、BIG5字集和一些符号,共包括21003个字符。

GB18030是国家制定的一个强制性大字集标准,全称为GB18030-2000,它的推出使汉字集有了一个“大一统”的标准。

ASCII

我们知道,在计算机内部,所有的信息最终都表示为一个二进制的字符串。每一个二进制位有01两种状态,因此八个二进制位就可以组合出 256种状态,这被称为一个字节。也就是说,一个字节一共可以用来表示256种不同的状态,每一个状态对应一个符号,就是256个符号,从 000000011111111

上个世纪60年代,美国制定了一套字符编码,对英语字符与二进制位之间的关系,做了统一规定。这被称为ASCII码,一直沿用至今。

ASCII的字库包括128个字符,比如空格(SPACE)的编码数字是32,二进制流是00100000。这128个字符(包括32个不能打印出来的控制符号),只占用了一个字节的后面7位,最前面的1位统一规定为0

在电线里传输被ASCII编码的二进制流时,为了检验错误,会修改最高位,用来做奇偶校验。这利用了ASCII本身的性质(最高位都是0)。

UCS

ISO10646标准所定义的通用字符集(Universal Character Set),编码长度可达32位。

Unicode

Unicode是一种正在发展的编码字符集,由统一码联盟制定,希望将全世界常用文字都函括进去。Unicode兼容ASCII7ASCII中有的字符Unicode中都有,并且对应相同的编码数字。

Unicode编码长度可达到32位,即4字节。第一字节称为组,第二字节称为面,第三字节称为行,第四字节称为点。第0组第0面里的字符可以只用2个字节表示,且涵盖了绝大部分的常用字,所以备受青睐。为了方便称呼,

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值