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()
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()
相关文章推荐
- 字符和字符串的基础知识
- [系统] Solr 介绍以及 XML 中特殊字符 Unicode 编码
- 判断回文 字符串的最后一个字符是'/0', 而不是'/n' ,基础知识都忘了
- Java入门:基础算法之从字符串中找到重复的字符
- JavaSE8基础 String String.valueOf 将字符数组转成字符串
- C++ 计算字符串长度之Function(包含unicode,utf-8),包含特殊字符,欧洲数字千位分隔符,逗号分隔符
- JavaScript基础 substr(1) 忽略第一个字符,从index=1的字符到末尾 进行提取字符串
- mfc 中unicode 字符和字符串的使用
- java 将字符Unicode字符转换成字符串
- JavaScript基础 split("") 将字符串分割成字符数组
- 基础算法(二) ———— 判断一个字符串中的所有字符是否都不
- python写的crond后台任务打印包含中文字符的unicode 字符串,出现异常?
- 8. PowerShell - 基础概要,变量,字符和字符串操作,运算符操作
- 字符数组和字符串介绍
- 我学习Windows核心编程 之二 ANSI/Unicode字符和字符串
- JAVA字符编码系列一:Unicode,GBK,GB2312,UTF-8概念基础
- 腾讯2017年实习生编程题目(第二题)----2.算法基础-字符移位 小Q最近遇到了一个难题:把一个字符串的大写字母放到字符串的后面,各个字符的相对位置不变,且不能申请额外的空间。
- java语言基础(11)——字符数据与字符串数据参与运算
- 字符和字符串的基础知识
- 算法基础:删除字符串中出现次数最少的字符(Golang实现)