第二章Unicode简介在第一章中,我已经预告,C语言中在Microsoft Windows程序设计中扮演着重要角色的任何部分都会讲述到,您也许在传统文字模式程序设计中还尚未遇到过这些问题。宽字符集和Unicode差不多就是这样的问题。简单地说,Unicode扩展自ASCII字符集。在严格的ASCII中,每个字符用7位表示,或者计算机上普遍使用的每字符有8位宽;而Unicode使用全16位字符集。这使得Unicode能够表示世界上所有的书写语言中可能用于计算机通讯的字符、象形文字和其它符号。Unicode最初打算作为ASCII的补充,可能的话,最终将代替它。考虑到ASCII是计算机中最具支配地位的标准,所以这的确是一个很高的目标。 Unicode影响到了计算机工业的每个部分,但也许会对操作系统和程序设计语言的影响最大。从这方面来看,我们已经上路了。Windows NT从底层支持Unicode(不幸的是, Windows 98只是小部分支持Unicode)。先天即被ANSI束缚的C程序设计语言通过对宽字符集的支持来支持Unicode。下面将详细讨论这些内容。自然,作为程序写作者,我们通常会面对许多繁重的工作。我已试图透过使本书中的所有程序「Unicode化」来减轻负担。其含义会随着本章对Unicode的讨论而清晰起来。

字符集简史虽然不能确定人类开始讲话的时间,但书写已有大约6000年的历史了。实际上,早期书写的内容是象形文字。每个字符都对应于发声的字母表则出现于大约3000年前。虽然人们过去使用的多种书写语言都用得好好的,但19世纪的几个发明者还是看到了更多的需求。 Samuel F. B. Morse在1838年到1854年间发明了电报,当时他还发明了一种电报上使用的代码。字母表中的每个字符对应于一系列短的和长的脉冲(点和破折号)。虽然其中大小写字母之间没有区别,但数字和标点符号都有了自己的代码。 Morse代码并不是以其它图画的或印刷的象形文字来代表书写语言的第一个例子。1821年到1824年之间,年轻的Louis Braille受到在夜间读写信息的军用系统的启发,发明了一种代码,它用纸上突起的点作为代码来帮助盲人阅读。Braille代码实际上是一种6位代码,它把字符、常用字母组合、常用单字和标点进行编码。一个特殊的escape代码表示后续的字符代码应解释为大写。一个特殊的shift代码允许后续代码被解释为数字。 Telex代码,包括Baudot (以一个法国工程师命名,该工程师死于1903年)以及一种被称为CCITT #2的代码(1931年被标准化),都是包括字符和数字的5位代码。美国标准早期计算机的字符码是从Hollerith卡片(号称不能被折迭、卷曲或毁伤)发展而来的,该卡片由Herman Hollerith发明并首次在1890年的美国人口普查中使用。6位字符码系统