服务热线:
您当前的位置:首页 > 世纪星月刊 > 第10期 (2010年10月)

【技术前沿】文字编码:统一还是独立?

2011/10/13 10:29:21

 

作者:技术部 杨盛海

 

文本编码

 

  自从计算机出现后,人们就想要将文字存储到计算机中,想方设法将文字表示成由二进制组成的编码,最开始的比较成熟的编码就是ANSI编码,它使用一个字节,即8个二进制位表示一个字母,这样就可以表示多达256个字母,这对于只有26个字母的西文来说足够用了,除了字母外,还可将像标点符号、控制符等加入其中。

  当计算机产业发展起来后,世界上其它地方的人们开始使用计算机,这种编码显示出了它的局限性,包括汉字在内的东方文字根本无法用一个字节编码,这是早期编码设计人员没有想到或者不想去考虑的事,可以用两个字概括--"自私"。所以世界各国为了让计算机服务于自己的国家,设计了符合自己国情的编码,比较成功的有我国大陆的GB2312码和台湾的BIG-5码。GB2312码实现起来很简单,就是用1个字节表示西文字母,用2个字节表示汉字。但其中的编码有一些规则,这里没有足够的篇幅来论述。

  当几乎每个国家都使用自己的编码系统,国与国之间的交流又成了问题,就像英语不好的人和老外谈生意一样,需要带一个翻译。计算机需要安装一个编码转换器,非常不方便。最后有人(国际标准化组织)出来搞了一个全球统一的编码,这就是著名的UNICODE,我把它看成是宇宙编码的简称(UNIVERSE CODE),实际也是这个意思,这个编码可以使用多达4个字节来编码一个字符,再加上一些限制,这样,则可以容纳1114112个字符,这样,足够编码世上所有字符。

  实际上,在绝大多数应用中,只需要用两个字节来编码就够了,所以UNICODE有许多在实际中应用的子集,还有一些它的压缩编码等。我们在编程过程中用的一般是由两个字节编码的UNICODE。值的一提的是,我国国内使用的GB18030编码也是UNICODE的一个子集,而GB2312又是GB18030的一个子集。

  之后我们再提一个比较特别的压缩编码,在提这个编码以前我们再说一说一种应用广泛的文档技术-XML。

 

XML技术

 

  我们的计算机每天都要处理和文本有关的东西,不只是平面的文本,还有立体的文本,我称它们是平面的还是立体的,是根据这些文本的用途,如果只是一篇文章、一条新闻报道,我们可以称它为是平面的,从哪个角度来看都是一样的。如果说我们要在网上发布一商品的信息,包括它的厂家信息、产品的各种参数,产品的价格等等,那么这条信息就是立体的文本,每个人看它的角度都不一样,有人看重品牌,有人看重价格,有人看重它的某项技术参数。如果我们把这条信息按照文章的格式发布出去,就无法满足以上这些人的要求,因为我们无法从平面的文本中提取这些信息以供这些人搜索。所以要展示立体的文本,就得使用展示立体文本的技术,这种技术之一就是XML。我们平常打交道最多的文本-网页,就是使用这种技术的子集来构建的。之所以计算机能够理解这些文本并且知道如何处理它们,就是因为它使用了这项技术。

  不仅如此,除了文本之外,XML还能够处理包括音频等多媒体数据,所以说它是"文档处理技术"是有些狭隘了。总之,我个人理解能力有限,无法全面理解博大精深的XML技术,请各位读者牛人们独自体会吧。

  如此好的技术,总是老外先于我们搞出来,作为国人,心有不甘啊。没有研究的福分,总还有使用它的幸运。下面就我在工作之中使用XML技术的心得作下论述。

 

问题及解决

 

  在一个设备管理系统中,我们要把一台设备表示成由许多材料组成的。起始时,我想把这种关系存储到数据库中,建立一个数据表,每一组字段表示一种材料,不是一个,是一组,包括这种材料的名称、型号、需要使用的数量等。这就需要3个字段,假设一台设备需要使用三种材料,那么这台设备对应的数据记录就需要9个字段。事实上每台设备可能用到的材料有几十种甚至上百种,这样,我们就无法建立几百个字段来容纳这台设备了。于是,我想到了XML技术。我们用一篇XML文档来容纳这百十种材料,完全是小菜一碟。然后将这篇XML文档的内容作为一个设备结构字段的内容保存到数据库中,这样,问题就轻而易举地解决了。

  当我这样想,并且着手这样去做的时候,还有一些琐碎的问题在前面等着呢。

  在Window下使用VB编程,需要使用MSXML这个组件来建立XML文档,将设备所需要的各种材料以XML节点的方式组织进文档中。当我建立好这个文档,将这个文档的文本贴到文本文档中时,记事本中本应当显示中文的地方却显示为乱码。

  经过多方查找资料,最后发现,我们经常看的文本文档是GB2312编码的,而XML文档是UTF-8编码的。这就是我们之前所提到的那个“比较特殊”的编码,就是这个编码坏的事。两种编码不一样,所以直接用剪贴板拷来拷去,就使得其中的中文变成了乱码。

  为什么当UNICODE成为全球统一编码之后,西方人又搞了一套UTF-8编码呢,是因为UNICODE数据量太大了,他们经常使用的西文字符用一个字节就搞定了,干嘛还要用两个字节来表示呢,于是,他们设计的这种编码,其中的西文字符编码又退回到最初的ANSI编码。而中文字符在这种编码体系中却要占用3个字节!也许这和它的设计方法有关,总之,我看到这种编码方式第一感觉就是,它的设计者真是损人利已啊!比自私的ANSI编码要可恶得多。这种编码我第一次使用它就造成了一天多的工作延误。

 

 


企业邮箱  |  法律公告  |  隐私保护  |  联系我们  |