文本编码与XML及其它

文本编码与XML及其它

         文本编码

当计算机出现后,人们就想办法将文字存储到计算机中,就得想方设法将文字表示成由二进制组成的编码,最开始的比较成熟的编码就是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编码要可恶得多。这种编码我第一次使用它就造成了一天多的工作延误。

最终,我使用微软的编码转换函数搞定了编码,后又使用了写二进制文件的方式将数据库字段转换成临时的XML文件(写文本文件的方式根本无法使用),以供分析设备表中的材料。直到完成分析工作,再将临时XML文件删除。

一点反思

老外将XML技术弄成UTF编码的,我们也完全可以把它弄成符合我们利益的GB2312编码的,但是这样我们还得写自己的XML解析器才行,我们有几个人会写,或者有哪些公司愿意花费精力来写,这些都是问题。没有高瞻远瞩的魄力,只看重眼前利益,我们也许永远只能使用他人的先进技术而受制于他人。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值