unicode浅谈--信息论系列

晨曦之光 发布于 2012/04/10 15:02
阅读 83
收藏 0

数字化大行其道以来,百分之九十的设备是智能设备,百分之九十九的设备是数字化的,所谓的数字化就是它们处理数字信息,这个过程仅仅在于处理过程而不包括最开始的输入和最终的输出,因为数字信息只是被离散化的集成电路识别并且这些电路可以对数字信息进行更简易的处理,但是我们人类却很难识别数字信息,我们人类要么识别自然事物,比如山水,要么识别抽象符号,比如文字。前面说过,所谓数字信息其实就是自然事物的编码,这个编码是离散化的,易于被芯片处理,所谓编码其实就是输入和输出两端对要处理的事物的一种抽象和约定而不是真正的事物,比如我对你说,当我告诉你1时,代表红色,2代表蓝色,那么你听到了1就意味着红色,2就意味着蓝色,这里的1和2就是编码。

计算机进行数字处理的过程其实就是如何处理编码,这个不是本文讨论的范畴,这个问题涉及到电路的设计,操作系统等系统软件的设计,本文讨论的是另一个重要的领域就是编码,事实上编码比处理本身更加基础和重要,因为只有经过正确编码的信息在经过数字系统处理之后才能得到正确结果,只有经过良好编码的信息在数字系统处理的时候才会更加有效率,因此编码实际上很重要。在互联网风行之前,数字系统仅限于本机处理或者小范围的联网处理,人们很容易达成一致的编码约定,因为大家的文化背景一致,实际上一切都很一致,人们迫切想达到的效果就是自由的通信,根本不会有扩展系统的需求,也不会想到将来外地人用我的系统怎么办,我应该照着它们的习惯扩展编码并且在软件上加上处理他们新的编码的机制吗?这些人们都不会想,因此在互联网出现以后就出现了混乱,这个混乱的根本就是编码,毕竟编码多么的基础,人们进入信息高速公路就是为了信息,而信息其实就是一种自然事物的编码。

很显然,英语国家的数字化机制占了上风,因为计算机就是美国发明了,他们发明这东西时用的当然是英语编码了,当计算机流入中国,日本,猫国时,问题就出现了,英文的ascii编码不能很好的支持这些国家的文字,因为前面的文章说了,中文信息熵太大了,信息量当然就大,所需要的编码很多,因此8个位的编码根本就不够,于是比如中国就发明了自己的编码,像区位码之类的,然而美国并不知道什么是区位码,要想在美国用中文和中国人通信,那么美国的计算机必须支持中文编码,这才一个中国,非洲的小国家还没有算上呢,这样的话一台机器就要维护很多的编码,要知道,编码集也是要接受操作系统管理的,这样的话,势必为了支持更多的编码要修改系统软件,如此下去这个烂摊子可能没法收拾,越来越多的字符被编码,而且很多字符其实都一样,比如a这个字母在不同的国家却是不同的编码,这实在违背信息全球化的潮流,既然信息全球化了就应该用一个一致的方式将所有国家的字符编码,也就是需要一个普通话,这就是unicode。

首先需要解决一个问题,就是很多国家都有相同的字符,但是含义不同,因此新的Unicode旨在将其作为一个相同的编码,要知道相同字符的不同含义是上下文相关的,计算机的系统软件根本不用管这些,应用软件可以理解即可,按照机制和策略相分离的原则,编码体系只提供机制,就是简单的编码,就是把自然界的抽象符号编码成数字而不管该抽象符号的含义,含义的解释就是策略问题了,这个不属于编码体系的任务,因此将原来的各国的编码系统都用这个原则抽象提升一下,也就是不管含义地抽象一下取所有字符集形状的并集,这个并集就是unicode编码,注意unicode是字符形状的并集,它是抽象的,每一个字符就是一个该形状的字符,别的没有任何含义,因此中文的“乙”和日文的“乙”在unicode中是一个编码,然而它们在中国和日本本地的编码中却是不同的编码,这就是unicode的第一层抽象含义。

unicode第二层抽象的含义在于codepage这个概念,这是为了兼容以前的字符集而设置的,因为原来的字符集必须还可以用,要知道数字离开了编码就是0和1,没有任何含义,如果费了原来的编码,那么我们的社会会倒退很多年的,比如很多计算机中的机密文件再也打不开了,打开了全部都是乱码...codepage旨在兼容原来的字符集,其实它就是提供了一个原来字符集的字符和unicode字符集的字符的一个映射,每个国家都会有一个或者多个代码页的,比如计算机通信中传输和计算机处理的都是unicode字符编码,但是涉及到信息输入和输出的时候怎么解释这些字符为什么形状呢?这就是codepage的作用了。比如unicode中4E59表示“乙”这个抽象符号,如果计算机发现了这个符号,当然可以毫不犹豫的显示“乙”,因为unicode是抽象的,世界统一的,但是反过来就不行,在日文编码中,“乙”的编码是89B3,如果我输入了一个89B3,那么计算机怎么解释呢?是按照unicode的89B3解释还是按照日文本地字符集的89B3解释,还是按照中文的89B3解释,如果按照日本本地的解释,那么就是“乙”字,如果是中文的编码,那么就是另外一个字符,如果按照unicode本身的解释,还是另外一个字符,因此,就规定了codepage,这个概念就是规定怎么解释字符。这里可以看出,codepage实际上是字符集的编码,也可以叫做编码的编码,比如cp936代表中文编码,而cp932代表日文的编码,输入一个字符,首先查默认编码,如果是本地编码,然么查默认代码页将这个字符映射到unicode码,然后处理,处理完了以后按照相反的路径回来就可以了,这就是codepage的含义,对编码的编码。

unicode的设计过程很简单,就是将符号本身从其含义中分离出来,这样就可以剔除掉很多信息,信息量减少,信息熵降低,其实就是元数据更少了,因此只用两个字节就可以几乎完全表示全世界的字符了,我们人类的抽象信息尽在这两个字节中。以上仅仅是unicode的编码,还有另外一个很重要的东西就是传输,这里的概念也很多,比如utf-8,utf-16等等,关于传输就不多说了。

其实完全可以这么干,将抽象更往上提升一层,不给unicode任何编码,完全由codepage实现,计算机根本不知道这个unicode表示什么形状的字符,unicode真的仅仅就是一个数字了,没有任何含义,它的含义完全由codepage定义,每个计算机中安装默认的codepage,而且可以为每个软件指定特殊的codepage。不过这只是逻辑上的概念,实际上unicode正是这么干的。真正的数字系统就是处理器只知道数字而不知道其含义,本质上就是晶体管的特性只为0和1开路。


原文链接:http://blog.csdn.net/dog250/article/details/5303476
加载中
返回顶部
顶部