ImageVerifierCode 换一换
格式:DOCX , 页数:21 ,大小:76.23KB ,
资源ID:12784924      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/12784924.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(支持 Unicode.docx)为本站会员(b****0)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

支持 Unicode.docx

1、支持 Unicode1、 Unicode 和 MBCS为支持国际编程,启用了 Microsoft 基础类库 (MFC)、Visual C+ 的 C 运行时库和 Visual C+ 开发环境。它们: 在 Windows 2000(以前为 Windows NT)上提供对 Unicode 标准的支持。 Unicode 是为所有语言提供足够编码的 16 位字符编码。所有 ASCII 字符都作为“加宽”字符包含在 Unicode 中。注意Windows 95、Windows 98 或 Windows Millennium Edition 上不支持 Unicode 标准。 在所有平台上,支持称为双字节字符

2、集 (DBCS) 的多字节字符集 (MBCS) 形式。 DBCS 字符由一个或两个字节构成。某些范围的字节留出用作“前导字节”。前导字节指定由它和后面的“尾字节”构成单个双字节宽字符。必须清楚哪些字节是前导字节。在某个多字节字符集内,前导字节位于某个特定范围内,尾字节也一样。当这两种范围重叠时,可能需要计算上下文以确定某个给定的字节是用作前导字节还是尾字节。 对简化 MBCS 编程的工具提供支持(MBCS 编程用于为国际市场编写的应用程序)。当在支持 MBCS 的 Windows 操作系统版本上运行时,Visual C+ 开发系统(包括集成的源代码编辑器、调试器和命令行工具)完全支持 MBCS

3、。有关更多信息,请参见 Visual C+ 中的 MBCS 支持。注意在本文档中,MBCS 用于描述所有对多字节字符的非 Unicode 支持。在 Visual C+ 中,MBCS 始终是指 DBCS。不支持比两个字节宽的字符集。按照定义,ASCII 字符集是所有多字节字符集的子集。在许多多字节字符集中,0x00 到 0x7F 范围内的每个字符都与 ASCII 字符集中具有相同值的字符相同。例如,在 ASCII 和 MBCS 字符串中,单字节 NULL 字符(“0”)的值都是 0x00 并且指示终止空字符。2、 国际支持大多数传统的 C 和 C+ 代码采用不适用于国际应用程序的字符和字符串操作

4、。虽然 MFC 和运行时库都支持 Unicode 或 MBCS,但您仍需要亲自做一些工作。为指导您,本节解释 Visual C+ 中“国际支持”的含义: 通过 MFC 函数参数列表和返回类型中的可移植数据类型来支持 Unicode 和 MBCS。根据您的版本是否定义了 _UNICODE 符号或 _MBCS(即 DBCS)符号,按条件用合适的方式来定义这些类型。根据您的版本定义的符号(即这两个符号中的一个),MFC 库的不同变量自动与应用程序链接。 类库代码使用可移植的运行时函数和其他方法来确保正确的 Unicode 或 MBCS 行为。 您仍必须在代码中处理特定类型的国际化任务: 使用相同的可

5、移植运行时函数,使 MFC 在任一环境下可移植。 使用 _T 宏使字符串和字符在任一环境下可移植。有关更多信息,请参见 Tchar.h 中的一般文本映射。 在 MBCS 下分析字符串时有一些注意事项。而在 Unicode 下分析字符串时则不需要注意这些事项。有关更多信息,请参见 MBCS 编程提示。 在应用程序中混合使用 ANSI(8 位)和 Unicode(16 位)字符时要小心。可以在程序的某些部分使用 ANSI 字符,而在其他部分使用 Unicode 字符,但不能在同一字符串中混合使用这两种字符。 在应用程序中不要硬编码字符串。而应通过将它们添加到应用程序的 .rc 文件使其成为 STR

6、INGTABLE 资源。然后就可以在不必更改或重新编译源代码的情况下本地化应用程序。有关 STRINGTABLE 资源的更多信息,请参见 字符串编辑器。注意欧洲和 MBCS 字符集的某些字符(如重音字母)的字符代码大于 0x80。由于大多数代码使用有符号字符,因此这些大于 0x80 的代码在转换为 int 时是带符号扩展的。这对数组索引是个问题,因为如果带符号扩展的字符为负值,则索引将超出数组范围。使用 MBCS(如日语)的语言也很独特。由于一个字符可能由单字节或双字节组成,因此应始终同时处理两个字节。3、 国际化策略根据您的目标操作系统和市场,有几个国际化策略: 应用程序使用 Unicode

7、,因此在 Windows 2000 和 Windows NT(但不能在 Windows 95 或 Windows 98)上运行。使用 Unicode 特定的功能并且所有字符都为 16 位宽(尽管可以出于特殊目的在程序的某些部分使用 ANSI 字符)。C 运行时库提供仅使用 Unicode 编程的函数、宏和数据类型。MFC 则完全支持 Unicode。 如果应用程序使用 MBCS 则可以在任何 Win32 平台上运行。使用特定于 MBCS 的功能。字符串可以包含单字节字符、双字节字符或同时包含这两种字符。C 运行时库提供仅使用 MBCS 编程的函数、宏和数据类型。MFC 则完全支持 MBCS。

8、编写的应用程序的源代码具有完全可移植性。通过定义 _UNICODE 符号或 _MBCS 符号来重新编译应用程序,可以生成使用其中任何一种字符的版本。有关更多信息,请参见 Tchar.h 中的一般文本映射。 应用程序对 Windows 95、Windows 98 和 Windows ME 上缺少的 Unicode 函数使用包装库,类似 设计一个在 Windows 98 和 Windows 2000 上都运行的 Unicode 应用程序 中所描述的包装库。包装库还可通过商业手段获得。使用完全可移植的 C 运行时函数、宏和数据类型。MFC 的灵活性支持所有这些策略。这些主题的其余部分着重说明如何编写

9、可生成为 Unicode 应用程序或 MBCS 应用程序的完全可移植代码。4、 区域设置和代码页区域设置 ID 反映特定地理区域的当地约定和语言。可能有一个以上的国家/地区说某种特定的语言,例如,巴西和葡萄牙都说葡萄牙语。反之,一个国家/地区可能有一种以上的官方语言。例如,加拿大有两种官方语言:英语和法语。因此,加拿大有两个不同的区域设置:加拿大英语和加拿大法语。一些与区域设置相关的类别包括日期的格式设置和货币值的显示格式。语言确定文本和数据的格式约定,而国家/地区则确定区域约定。每种语言都有一个由代码页表示的唯一映射,包括字母表中的字符以外的字符(如标点符号和数字)。代码页是一个字符集并且与

10、语言相关。因此,区域设置就成为语言、国家/地区和代码页的唯一组合。可以通过调用 setlocale 函数在运行时更改区域设置和代码页设置。不同的语言可能使用不同的代码页。例如,ANSI 代码页 1252 用于英语和大多数欧洲语言,而 ANSI 代码页 932 则用于日本汉字。实际上,所有代码页都共享 ASCII 字符集中最低的 128 个字符(0x00 到 0x7F)。任何单字节代码页都可使用一个包含 256 项的表来表示,在该表中表示为字节值到字符(包括数字和标点符号)或标志符号的映射。任何多字节代码页也可以表示为一个非常大的表(有 64K 项),包含双字节值到字符的映射。但实际上,对于前

11、256 个(单字节)字符,它通常用表表示;对于双字节值,则用范围表示。有关代码页的更多信息,请参见 代码页。C 运行时库有两类内部代码页:区域设置和多字节。在程序执行期间可以更改当前代码页(有关 setlocale 和 _setmbcp 函数的信息,请参见文档)。而且,运行时库可以获取并使用操作系统代码页的值。在 Windows 2000 中,操作系统代码页是“系统默认 ANSI”代码页。此代码页在程序的执行期间保持不变。更改区域设置代码页后,与区域设置相关的函数集的行为更改为由选定的代码页指示的行为。默认情况下,所有与区域设置相关的函数使用对于“C”区域设置唯一的区域设置代码页开始执行过程。

12、可以通过调用 setlocale 函数来更改内部区域设置代码页(以及其他区域设置特定的属性)。对 setlocale(LC_ALL, ) 的调用将区域设置设置为由操作系统用户区域设置指示的那个区域设置。同样,更改多字节代码页时,多字节函数的行为更改为由选定的代码页指示的行为。默认情况下,所有多字节函数使用与操作系统默认代码页相对应的多字节代码页开始执行过程。可以通过调用 _setmbcp 函数来更改内部多字节代码页。C 运行时函数 setlocale 设置、更改或查询部分或全部当前程序的区域设置信息。_wsetlocale 例程是 setlocale 的宽字符版本;_wsetlocale 的参

13、数和返回值是宽字符字符串。5、 字符集可移植性的好处即使目前不打算国际化应用程序,也可以从使用 MFC 和 C 运行时可移植性功能中获益: 编写可移植代码使基本代码更灵活。以后可以很容易地将代码移动到 Unicode 或 MBCS。 使用 Unicode 能提高用于 Windows 2000 的应用程序的效率。由于 Windows 2000 使用 Unicode,因此与操作系统之间传递的非 Unicode 字符串必须进行转换,这会增加系统开销。 使用 MBCS 使您得以在 Windows 2000 以外的 Win32 平台(如 Windows 95 或 Windows 98)上支持国际市场。6

14、、 支持使用 wmainVisual C+ 支持定义 wmain 函数,并将宽字符参数传递给 Unicode 应用程序。使用与 main 函数相似的格式声明 wmain 函数的形参。然后可以将宽字符参数和宽字符环境指针(可选)传递给该程序。wmain 的 argv 和 envp 参数为 wchar_t* 类型。例如:复制代码wmain( intargc, wchar_t*argv, wchar_t*envp)注意MFC Unicode 应用程序使用 wWinMain 作为入口点。在这种情况下,CWinApp:m_lpCmdLine 是一个 Unicode 字符串。请务必使用 /ENTRY 链接

15、器选项设置 wWinMainCRTStartup。如果程序使用 main 函数,则多字节字符环境由运行时库在程序启动时创建。环境的宽字符副本仅在需要时创建(如调用 _wgetenv 或 _wputenv 函数时)。首次调用 _wputenv 或在 MBCS 环境已存在的情况下首次调用 _wgetenv 时,将创建相应的宽字符字符串环境。然后用 _wenviron 全局变量(_environ 全局变量的宽字符版本)指向该环境。此时,同时存在两个环境的副本(MBCS 和 Unicode),在程序的整个生存期这两个副本由运行时系统维护。同样,如果程序使用 wmain 函数,则在程序启动时创建宽字符环

16、境并用 _wenviron 全局变量指向该环境。在首次调用 _putenv 或 getenv 时创建 MBCS (ASCII) 环境,并用 _environ 全局变量指向该环境。7、 支持 UnicodeUnicode 是支持所有字符集(包括无法以单个字节表示的字符集)的规范。为国际市场编程时应考虑使用 Unicode 或多字节字符集 (MBCS),或使程序能够通过更改开关来生成支持两种字符集之一的程序。宽字符是双字节多语言字符代码。在当今的全球计算业内使用的大多数字符(包括技术符号和特殊的发布字符),都可以根据 Unicode 规范表示为宽字符形式。无法以 1 个宽字符表示的字符可以通过 U

17、nicode 的代理项功能以 Unicode 对表示。由于每个宽字符总是以固定的 16 位大小表示,因此使用宽字符可以简化使用国际字符集进行的编程。宽字符字符串表示为一个 wchar_t 数组并由 wchar_t* 指针指向它。可以通过用字母 L 作为字符的前缀将任何 ASCII 字符表示为宽字符形式。例如,L0 是终止宽(16 位)NULL 字符。同样,可以通过用字母 L 作为 ASCII 字符串的前缀 (LHello) 将任何 ASCII 字符串表示为宽字符字符串形式。通常,宽字符在内存中占用的空间比多字节字符多,但处理速度更快。另外,在多字节编码中一次只能表示一个区域设置,而世界上的所有

18、字符集都同时以 Unicode 表示形式表示。除数据库类外,MFC 框架完全支持 Unicode。(ODBC 不支持 Unicode。)MFC 通过始终使用可移植的宏来实现对 Unicode 的支持,如下表所示:MFC 中的可移植数据类型不可移植的数据类型 由该宏替换 char _TCHARchar*, LPSTR(Win32 数据类型)LPTSTR const char*, LPCSTR(Win32 数据类型) LPCTSTR CString 类使用 _TCHAR 作为基,并提供构造函数和运算符以方便转换。可以通过使用与处理 Windows ANSI 字符集相同的逻辑来编写大多数 Unico

19、de 的字符串操作(只是基本操作单位是 16 位字符,而非 8 位字节)。与使用多字节字符集 (MBCS) 不同,不必(也不应)将 Unicode 字符视为两个不同的字节。2、Unicode 编程摘要若要利用 MFC 和 C 运行时对 Unicode 的支持,需要: 定义 _UNICODE。在生成程序之前定义 _UNICODE 符号。 指定入口点。在项目的属性页对话框的“链接器”文件夹的“输出”页中,设置 wWinMainCRTStartup 的“入口点”符号。 使用可移植的运行时函数和类型。为 Unicode 字符串处理使用正确的 C 运行时函数。可以使用 wcs 函数族,但您可能更喜欢使用

20、完全可移植的(支持国际化的)_TCHAR 宏。这些宏都以 _tcs 为前缀;它们一对一地替换 str 函数族。在“运行时库参考”的国际化节中对这些函数有详细介绍。有关更多信息,请参见 Tchar.h 中的一般文本映射。使用支持 Unicode 中描述的 _TCHAR 和相关的可移植数据类型。 正确地处理字符串。Visual C+ 编译器将编码的字符串解释为:复制代码Lthis is a literal string指出这是 Unicode 字符的字符串。可以对文字字符使用相同的前缀。一般使用 _T 宏对字符串进行编码,因此在 Unicode 下字符串编译为 Unicode 字符串,不使用 Un

21、icode 时字符串编译为 ANSI 字符串(包括 MBCS)。例如,不要使用:复制代码pWnd-SetWindowText( Hello );而使用: 复制代码pWnd-SetWindowText( _T(Hello) );使用已定义的 _UNICODE,_T 将字符串翻译为以 L 为前缀的格式;否则 _T 将字符串翻译为不带 L 前缀的格式。提示_T 宏与 _TEXT 宏相同。 将字符串长度传递给函数时要小心。一些函数需要获取字符串的字符数;另一些函数需要获取字符串的字节数。例如,如果已定义 _UNICODE,则下列对 CArchive 对象的调用无效(str 属于 CString):复制

22、代码archive.Write( str, str.GetLength( ) ); / invalid在 Unicode 应用程序中,由于每个字符都是 2 个字节宽,因此长度给出的是字符数而不是正确的字节数。所以必须使用:复制代码archive.Write( str, str.GetLength( ) * sizeof( _TCHAR ) ); / valid它指定要写入的正确字节数。但是,MFC 成员函数是面向字符而非面向字节的,因此无需此额外的编码:复制代码pDC-TextOut( str, str.GetLength( ) );CDC:TextOut 采用字符数而非字节数。 使用 fop

23、en_s, _wfopen_s 打开 Unicode 文件。总之,MFC 和运行时库对 Windows 2000 下的 Unicode 编程提供下列支持: 除数据库类成员函数外,所有 MFC 函数(包括 CString)都支持 Unicode。CString 还提供 Unicode/ANSI 转换函数。 运行时库提供所有字符串处理函数的 Unicode 版本。(运行时库还提供适合 Unicode 或 MBCS 的可移植版本。这些版本是 _tcs 宏。) Tchar.h 提供可移植的数据类型以及用于转换字符串和字符的 _T 宏。有关更多信息,请参见 Tchar.h 中的一般文本映射。 运行时库提

24、供 main 的宽字符版本。使用 wmain 可使应用程序成为 Unicode 识别的应用程序。3、Tchar.h 中的一般文本映射为简化代码传输以方便国际使用,Microsoft 运行时库为许多数据类型、例程和其他对象提供 Microsoft 特定的“一般文本”映射。您可以使用 Tchar.h 中定义的这些映射,根据使用 #define 语句定义的清单常数,编写可以为单字节、多字节或 Unicode 编译的一般代码。一般文本映射是与 ANSI 不兼容的 Microsoft 扩展。使用 Tchar.h 可以从同一个源中生成单字节、MBCS 和 Unicode 应用程序。Tchar.h 定义以

25、_tcs 为前缀的宏,这些宏根据正确的预处理器定义映射到适当的 str、_mbs 或 wcs 函数。若要生成 MBCS,请定义 _MBCS 符号。若要生成 Unicode,请定义 _UNICODE 符号。若要生成单字节应用程序,请不进行任何定义(默认)。默认情况下,为 MFC 应用程序定义的是 _MBCS。在 Tchar.h 中根据条件定义 _TCHAR 数据类型。如果为您的版本定义了 _UNICODE 符号,则 _TCHAR 被定义为 wchar_t;否则,对于单字节和 MBCS 版本,_TCHAR 被定义为 char。((wchar_t 是基本的 Unicode 宽字符数据类型,它是 8

26、位有符号 char 的 16 位对等项。)对于国际应用程序,使用以 _TCHAR(而非字节)为单位进行操作的 _tcs 函数族。例如,_tcsncpy 复制 n 个 _TCHAR,而不是 n 个字节。由于某些 SBCS 字符串处理函数采用(有符号的)char* 参数,因此定义 _MBCS 时将产生类型不匹配的编译器警告。有三种方法避免此警告,按效率高低的顺序依次为:1. 在 Tchar.h 中使用类型安全内联函数 thunk。这是默认行为。2. 通过在命令行上定义 _MB_MAP_DIRECT,在 Tchar.h 中使用直接宏。如果这样做,必须手动匹配类型。这是最快的方法,但不是类型安全的方法

27、。3. 在 Tchar.h 中使用“类型安全”静态链接库函数 thunk。若要这样做,请在命令行上定义 _NO_INLINING 常数。这是最慢的方法,但却是类型安全性最高的方法。一般文本映射的预处理器指令# define 编译版本 示例 _UNICODE Unicode(宽字符)_tcsrev 映射到 _wcsrev_MBCS 多字节字符_tcsrev 映射到 _mbsrev无(默认:既未定义 _UNICODE 也未定义 _MBCS)SBCS (ASCII)_tcsrev 映射到 strrev例如,如果在程序中定义了 _MBCS,则 Tchar.h 中定义的一般文本函数 _tcsrev 映射

28、到 _mbsrev。或者如果在程序中定义了 _UNICODE,则 _tcsrev 映射到 _wcsrev。否则 _tcsrev 映射到 strrev。在 Tchar.h 中还提供了其他数据类型映射以方便编程,但 _TCHAR 是最有用的。一般文本数据类型映射一般文本 数据类型名称 _UNICODE 和 _MBCS 未定义 _MBCS 已定义 _UNICODE 已定义 _TCHAR char char wchar_t _TINT int int wint_t _TSCHAR signed char signed char wchar_t _TUCHAR unsigned char unsigne

29、d char wchar_t _TXCHAR char unsigned char wchar_t _T 或 _TEXT无效(由预处理器移除)无效(由预处理器移除)L(将后面的字符或字符串转换成相应的 Unicode 形式)有关例程、变量和其他对象的一般文本映射的完整列表,请参见“运行时库参考”中的一般文本映射。注意Unicode 字符串有可能包含嵌入空字节,所以不要在 Unicode 字符串中使用 str 函数族。同样道理,不要在 MBCS(或 SBCS)字符串中使用 wcs 函数族。下列代码片段阐释了有关映射到 MBCS、Unicode 和 SBCS 模型的 _TCHAR 和 _tcsre

30、v 的用法。复制代码_TCHAR *RetVal, *szString;RetVal = _tcsrev(szString);如果已定义 _MBCS,则预处理器将此片段映射到下列代码:复制代码char *RetVal, *szString;RetVal = _mbsrev(szString);如果已定义 _UNICODE,则预处理器将此片段映射到下列代码:复制代码wchar_t *RetVal, *szString;RetVal = _wcsrev(szString);如果既未定义 _MBCS 也未定义 _UNICODE,则预处理器将此片段映射到单字节 ASCII 代码:复制代码char *R

31、etVal, *szString;RetVal = strrev(szString);因此可以编写、维护和编译与三种字符集中任何一种的特定例程一起运行的单个源代码文件。4、Internationalizationusing namespace System;using namespace System:Collections;using namespace System:Globalization;int main() / Creates and initializes the CultureInfo which uses the international sort. CultureInfo myCIintl = gcnew CultureInfo( es-ES,false ); / Creates and initializes the CultureInfo w

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1