Plain Text
Plain Text一词可以翻译为纯文本,指的是用二进制编码表示字符的一种只包含文本信息的文件。
由于涉及到“编码”问题,我建议诸位读者不妨先读一读Charles Petzold所写的Code: The Hidden Language of Computer Hardware and Software一书。在后续的话题中我就假设诸位已经读过这本书。对于书中所介绍过的内容我就尽量不重复说明。当然,如果你已经对计算机的原理有一个大致的理解,不读这本书也没什么关系。
Petzold的书中提到了摩尔斯电码,布莱叶盲文和ASCII码。抛开具体的物理载体,这些编码方案本质上都是用自然数代表字符。它们之间的区别在于,对于同样的字符(或者字符组合),不同的编码方案可能采用了不同的数字与之对应。因此,一封用摩尔斯电码编码的信如果按照ASCII码的规则解读,很大可能完全弄不明白这封信本来要说什么。这就是所谓的编码方案之间的不兼容。
对于一个普通人来说,如果他明知一封信是用摩尔斯电码编码后发给他的,他一般不会故意用ASCII或布莱叶盲文的规则去解读。因此,编码不兼容的问题看似并不是一个特别值得思考的问题。但是,当计算机时代来临后,编码不兼容的问题却发展成了一个大麻烦。
巴别塔的余波
《圣经》中说,最初的人类都说着一样的语言。但上帝为了阻止人类齐心协力建造直通天堂的高塔,故意变乱人类的语言。这样说着五花八门语言的人类无法沟通协调,最终放弃了修造高塔的计划。而那座被放弃的高塔则被称作“巴别塔”。
现实中,人类发展出五花八门的语言的原因并没有这么戏剧性。可能单纯因为一些随机因素和地理的分隔,不同地方的人就创造出了不同的语言。
经过成千上万年的历史变迁,不同地方的人交流融合,语言也随之融合。总体上,语言的种类是越来越少了。但是,直到现在母语使用者破千万的都还有几十种1。文字体系的数量要比发音体系的数量少一些,但现存的种类也很多。
计算机发明以后,用不同语言的人都想把自己的语言输入计算机中保存和处理。由于当时没有靠谱的国际组织负责协调语言文字编码的问题,有能力制定自己语言编码的组织都各自为政制定了自己的一套专属编码。但这些编码系统彼此不兼容,这就让语言不通的问题从人类之间蔓延到了计算机领域。欧美做的文本处理软件不一定能正常显示日语。日语系统下正常显示的软件到了中文系统可能就乱码了。甚至汉字都有好几套编码方案,这几套方案还互不兼容。
秩序之光
终于,在混乱之中出现了The Unicode Consortium这个组织。他们制定了一套Unicode标准。这套标准实际上就是尽量给每一个人类使用或者用过的字符分配一个独一无二的编号。不论是拉丁字母,阿拉伯数字,汉字,日语假名还是梵文字母统统放到一起编号。比如0061(十六进制的)分配给了小写字母“a”,这个编号就不会分给大写字母“A”、其他拉丁字母、汉字、假名或者别的什么字符。
Unicode指定的编号还不能直接作为字符的编码。因为Unicode编号的位数是不确定的,随着被编码的字符越来越多,所需要占用的最大位数也会越来越大。而现在计算机中保存一般数据都是以字节为单位的。我们还需要一种转换方法把Unicode字符的编号转换为变长编码。这种变长编码才实际在计算机上通用的,可以表示各种主要书写体系字符并且还在不断完善的编码系统。
最常用的转换方法称为UTF-8。它转化Unicode编号所得的变长编码称为UTF-8编码。“UTF”是“Unicode Transformation Format”的缩写。数字“8”表示这种转换方法以8位二进制数为1节。每当转换码快用尽时就追加8位。具体的转换方法见Wikipedia: UTF-8。
吐槽时间
为了统一标准而发行了一个新标准这种事必须有地位的组织做才行。不然只会让标准混乱的情况更加严重。如果当年秦国没有统一六国的实力却制定了一套新的货币、文字、度量衡,那只会让本就乱糟糟的战国更加混乱。
拓展资料
Unicode标准可以在Unicode官网看到。
如果有兴趣了解一下目前Unicode用了多少编号以及这些编号如何分布,可以参考Wikipedia: Plane (Unicode)
UTF-8的兼容性
ASCII