您的位置:首页 > 其它

Unicode字符/字符串 之一 基础介绍

2006-04-02 01:37 351 查看
在双字节字符集(D B C S)中,字符串中的每个字符可以包含一个字节或包含两个字节而U n i c o d e字符串中的所有字符都是1 6位的(两个字节)。总共可以得到65 000个字符,这样,它就能够对世界各国的书面文字中的所有字符进行编码,远远超过了单字节字符集的2 5 6个字符的数目。

U n i c o d e的优点:可以很容易地在不同语言之间进行数据交换;使你能够分配支持所有语言的单个二进制. e x e文件或D L L文件;提高应用程序的运行效率。

Windows 98不是一种全新的操作系统。它继承了1 6位Wi n d o w s操作系统的特性,它不是用来处理U n i c o d e的。如果要增加对U n i c o d e的支持,其工作量非常大,因此在该产品的特性列表中没有包括这个支持项目。由于这个原因, Windows 98像它的前任产品一样,几乎都是使用A N S I字符串来进行所有的内部操作的。虽然大多数U n i c o d e函数在Windows 98中不起任何作用,但是仍有少数U n i c o d e函数可以使用,最好不要使用,可能中会出现各种各样的错误。

Windows 2000/XP/2003是使用U n i c o d e从头进行开发的,用于创建窗口、显示文本、进行字符串操作等的所有核心函数都需要U n i c o d e字符串。如果调用任何一个Wi n d o w s函数并给它传递一个A N S I字符串,那么系统首先要将字符串转换成U n i c o d e,然后将U n i c o d e字符串传递给操作系统。如果希望函数返回A N S I字符串,系统就会首先将U n i c o d e字符串转换成A N S I字符串,然后将结果返回给你的应用程序。

Windows CE操作系统是为小型设备开发的,这些设备的内存很小,并且不带磁盘存储器。Windows CE本身就是使用U n i c o d e的一种操作系统,,为了使Windows CE尽量做得小一些,M i c r o s o f t公司决定完全不支持ANSI Wi n d o w s函数。

M i c r o s o f t公司为U n i c o d e设计了Windows API,这样,可以尽量减少对你的代码的影响。实际上,你可以编写单个源代码文件,以便使用或者不使用U n i c o d e来对它进行编译。只需要定义两个宏(U N I C O D E〔用于Wi n d o w s头文件〕和_ U N I C O D E〔用于C运行期头文件〕),就可以修改然后重新编译该源文件。

为了利用U n i c o d e字符串,标准的C头文件S t r i n g . h已经作了修改,以便定义一个名字为w c h a r _ t的数据类型,它是一个U n i c o d e字符的数据类型:
typedef unsigned short wchar_t
例如,如果想要创建一个缓存,用于存放最多为9 9个字符的U n i c o d e字符串和一个结尾为零的字符,可以使用下面这个语句:
wchar_t szBuffer[100];
该语句创建了一个由1 0 0个1 6位值组成的数组。当然,标准的C运行期字符串函数,如s t r c p y、s t r c h r和s t r c a t等,只能对A N S I字符串进行操作,不能正确地处理U n i c o d e字符串。因此,ANSI C也拥有一组补充函数。请注意,所有的U n i c o d e函数均以w c s开头,w c s是宽字符串的英文缩写。若要调用U n i c o d e函数,只需用前缀w c s来取代A N S I字符串函数的前缀s t r即可。

M i c r o s o f t公司提供的C运行期库与A N S I的标准C运行期库是一致的。ANSI C规定,C运行期库支持U n i c o d e字符和字符串。这意味着始终都可以调用C运行期函数,以便对U n i c o d e字符和字符串进行操作,即使是在Windows 98上运行,也可以调用这些函数。换句话说, w c s c a t、w c s l e n和w c s t o k等函数都能够在Windows 98上很好地运行,这些都是必须关心的操作系统函数。

对于包含了对s t r函数或w c s函数进行显式调用的代码来说,无法非常容易地同时为A N S I和U n i c o d e对这些代码进行编译。可以创建同时为A N S I和U n i c o d e进行编译的单个源代码文件。若要建立双重功能,必须包含T C h a r. h文件,而不是包含S t r i n g . h文件。T C h a r. h文件的唯一作用是帮助创建A N S I / U n i c o d e通用源代码文件。它包含你应该用在源代码中的一组宏,而不应该直接调用s t r函数或者w c s函数。如果在编译源代码文件时定义了_ U N I C O D E,这些宏就会引用w c s这组函数。如果没有定义_ U N I C O D E,那么这些宏将引用s t r这组宏。但是,除了使用这些宏之外,还有一些操作是必须进行的。T C h a r. h文件包含了另外一些宏。若要定义一个A N S I / U n i c o d e通用的字符串数组,请使用T C H A R数据类型;

按照默认设置, M i c r o s o f t公司的C + +编译器能够编译所有的字符串,就像它们是A N S I字符串,而不是U n i c o d e字符串。因此,如果没有定义_ U N I C O D E,该编译器将能正确地编译这一行代码。但是,如果定义了_ U N I C O D E,就会产生一个错误。若要生成一个U n i c o d e字符串而不是A N S I字符串,必须在字符串前加L或_TEXT()
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐