windows核心编程2
来源:互联网 发布:python常用函数 编辑:程序博客网 时间:2024/05/17 10:52
第2章U n i c o d e
2.1 字符集
软件的本地化要解决的真正问题,实际上就是如何来处理不同的字符集。问题是,有些文字和书写规则(比如日文中的汉字就是个典型的例子)的字符集中的符号太多了,因此单字节(它提供的符号最多不能超过2 5 6个)是根本不敷使用的。为此出现了双字节字符集(D B C S),以支持这些文字和书写规则。
2.1.1 单字节与双字节字符集
在双字节字符集中,字符串中的每个字符可以包含一个字节或包含两个字节。
使用双字节字符集,对于程序员来说简直是个很大的难题,因为有些字符只有一个字节宽,而有些字符则是两个字节宽。如果只是调用s t r l e n函数,那么你无法真正了解字符串中究竟有多少字符,它只能告诉你到达结尾的0之前有多少个字节。
2.1.2 Unicode:宽字节字符集
U n i c o d e字符串中的所有字符都是1 6位的(两个字节)。
由于U n i c o d e用一个1 6位的值来表示每个字符,因此总共可以得到65 000个字符,这样,它就能够对世界各国的书面文字中的所有字符进行编码,远远超过了单字节字符集的2 5 6个字符的数目。
1 6位代码 字符
0 0 0 0 - 0 0 7 F A S C I I
0 0 8 0 - 0 0 F F 拉丁文1字符
0 1 0 0 - 0 1 7 F 欧洲拉丁文
0 1 8 0 - 0 1 F F 扩充拉丁文
0 2 5 0 - 0 2 A F 标准拼音
0 2 B 0 - 0 2 F F 修改型字母
0 3 0 0 - 0 3 6 F 通用区分标志
0 4 0 0 - 0 4 F F 西里尔字母
0 5 3 0 - 0 5 8 F 亚美尼亚文
0 5 9 0 - 0 5 F F 西伯莱文
0 6 0 0 - 0 6 F F 阿拉伯文
0 9 0 0 - 0 9 7 F 梵文
目前尚未分配的代码点大约还有29 000个,不过它们是保留供将来使用的。另外,大约有
6 0 0 0个代码点是保留供个人使用的。
2.2 为什么使用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还
具备下列功能:
• 可以很容易地在不同语言之间进行数据交换。
• 使你能够分配支持所有语言的单个二进制. e x e文件或D L L文件。
• 提高应用程序的运行效率(本章后面还要详细介绍)。
2.3需要注意的问题
下面让我们进一步明确一下“M i c r o s o f t公司对U n i c o d e支持的情况”:
• Windows 2000既支持U n i c o d e,也支持A N S I,因此可以为任意一种开发应用程序。
• Windows 98只支持A N S I,只能为A N S I开发应用程序。
• Windows CE只支持U n i c o d e,只能为U n i c o d e开发应用程序。
2.4对C O M的简单说明
当M i c r o s o f t公司将C O M从1 6位Wi n d o w s转换成Wi n 3 2时,公司作出了一个决定,即需要字
符串的所有C O M接口方法都只能接受U n i c o d e字符串。
2.5如何编写U n i c o d e源代码
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和_ U N I C O D E),就可以修改然后重新编译该源文件。
2.6成为符合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的应
用程序。下面是应该遵循的一些基本原则:
• 将文本串视为字符数组,而不是c h a r s数组或字节数组。
• 将通用数据类型(如T C H A R和P T S T R)用于文本字符和字符串。
• 将显式数据类型(如B Y T E和P B Y T E)用于字节、字节指针和数据缓存。
• 将T E X T宏用于原义字符和字符串。
• 执行全局性替换(例如用P T S T R替换P S T R)。
• 修改字符串运算问题。例如函数通常希望你在字符中传递一个缓存的大小,而不是字节。
这意味着你不应该传递s i z e o f ( s z B u ff e r ) ,而应该传递( s i z e o f ( s z B u ff e r ) / s i z e o f ( T C H A R )。另外,如果需要为字符串分配一个内存块,并且拥有该字符串中的字符数目,那么请记住要按字节来
分配内存。这就是说,应该调用malloc(nCharacters *sizeof(TCHAR)), 而不是调用m a l l o c
( n C h a r a c t e r s )。在上面所说的所有原则中,这是最难记住的一条原则,如果操作错误,编译器
将不发出任何警告。
2.1 字符集
软件的本地化要解决的真正问题,实际上就是如何来处理不同的字符集。问题是,有些文字和书写规则(比如日文中的汉字就是个典型的例子)的字符集中的符号太多了,因此单字节(它提供的符号最多不能超过2 5 6个)是根本不敷使用的。为此出现了双字节字符集(D B C S),以支持这些文字和书写规则。
2.1.1 单字节与双字节字符集
在双字节字符集中,字符串中的每个字符可以包含一个字节或包含两个字节。
使用双字节字符集,对于程序员来说简直是个很大的难题,因为有些字符只有一个字节宽,而有些字符则是两个字节宽。如果只是调用s t r l e n函数,那么你无法真正了解字符串中究竟有多少字符,它只能告诉你到达结尾的0之前有多少个字节。
2.1.2 Unicode:宽字节字符集
U n i c o d e字符串中的所有字符都是1 6位的(两个字节)。
由于U n i c o d e用一个1 6位的值来表示每个字符,因此总共可以得到65 000个字符,这样,它就能够对世界各国的书面文字中的所有字符进行编码,远远超过了单字节字符集的2 5 6个字符的数目。
1 6位代码 字符
0 0 0 0 - 0 0 7 F A S C I I
0 0 8 0 - 0 0 F F 拉丁文1字符
0 1 0 0 - 0 1 7 F 欧洲拉丁文
0 1 8 0 - 0 1 F F 扩充拉丁文
0 2 5 0 - 0 2 A F 标准拼音
0 2 B 0 - 0 2 F F 修改型字母
0 3 0 0 - 0 3 6 F 通用区分标志
0 4 0 0 - 0 4 F F 西里尔字母
0 5 3 0 - 0 5 8 F 亚美尼亚文
0 5 9 0 - 0 5 F F 西伯莱文
0 6 0 0 - 0 6 F F 阿拉伯文
0 9 0 0 - 0 9 7 F 梵文
目前尚未分配的代码点大约还有29 000个,不过它们是保留供将来使用的。另外,大约有
6 0 0 0个代码点是保留供个人使用的。
2.2 为什么使用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还
具备下列功能:
• 可以很容易地在不同语言之间进行数据交换。
• 使你能够分配支持所有语言的单个二进制. e x e文件或D L L文件。
• 提高应用程序的运行效率(本章后面还要详细介绍)。
2.3需要注意的问题
下面让我们进一步明确一下“M i c r o s o f t公司对U n i c o d e支持的情况”:
• Windows 2000既支持U n i c o d e,也支持A N S I,因此可以为任意一种开发应用程序。
• Windows 98只支持A N S I,只能为A N S I开发应用程序。
• Windows CE只支持U n i c o d e,只能为U n i c o d e开发应用程序。
2.4对C O M的简单说明
当M i c r o s o f t公司将C O M从1 6位Wi n d o w s转换成Wi n 3 2时,公司作出了一个决定,即需要字
符串的所有C O M接口方法都只能接受U n i c o d e字符串。
2.5如何编写U n i c o d e源代码
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和_ U N I C O D E),就可以修改然后重新编译该源文件。
2.6成为符合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的应
用程序。下面是应该遵循的一些基本原则:
• 将文本串视为字符数组,而不是c h a r s数组或字节数组。
• 将通用数据类型(如T C H A R和P T S T R)用于文本字符和字符串。
• 将显式数据类型(如B Y T E和P B Y T E)用于字节、字节指针和数据缓存。
• 将T E X T宏用于原义字符和字符串。
• 执行全局性替换(例如用P T S T R替换P S T R)。
• 修改字符串运算问题。例如函数通常希望你在字符中传递一个缓存的大小,而不是字节。
这意味着你不应该传递s i z e o f ( s z B u ff e r ) ,而应该传递( s i z e o f ( s z B u ff e r ) / s i z e o f ( T C H A R )。另外,如果需要为字符串分配一个内存块,并且拥有该字符串中的字符数目,那么请记住要按字节来
分配内存。这就是说,应该调用malloc(nCharacters *sizeof(TCHAR)), 而不是调用m a l l o c
( n C h a r a c t e r s )。在上面所说的所有原则中,这是最难记住的一条原则,如果操作错误,编译器
将不发出任何警告。
- windows核心编程2
- Windows核心编程 (2)
- Windows核心编程2
- 读Windows核心编程 - 2
- Windows核心编程【2】小结
- 【Windows 核心编程】Windows 核心编程 -- 进程
- 【Windows核心编程】Windows核心编程 -- 作业
- WINDOWS核心编程笔记(1-2)
- WINDOWS核心编程 笔记 1-2
- 《Windows核心编程》第2章 Unicode
- 《Windows核心编程》第2章 Unicode
- 读《windows核心编程》笔记2
- 《Windows核心编程》读书笔记(2)
- Windows核心编程笔记(2)----进程
- windows核心编程之进程(2)
- Windows核心编程(三)
- windows核心编程--字符集
- windows核心编程--进程
- 使用axis在项目中开发WebService服务
- window对象弹出窗口
- ReportX技巧(9)输入控制
- 刚用seam做了一个级联下拉列表的例子
- vb与c#的语法比较
- windows核心编程2
- 计算消息摘要实例、各种加密实例
- 【语法】sizeof 笔记
- 2007年最令人失望的九大新兴技术出炉
- 哈佛大学图书馆上的警句
- Ajax Control Toolkit 34个服务器端控件
- 多边形的重心(转)
- document.getElementById("divv").style.display = 'none';
- 在VC6工程的Picture控件上显示JPG等图片,且图片随控件大小改变