某些语言,例如,日语和中文),较大字符集。若要支持编程这些市场的,选件Microsoft基础类库(mfc)为处理大字符集的两个不同方法启用:
Unicode
多字节字符集(mbcs)
MFC为Unicode字符串支持
整个选件类库对Unicode字符和字符串有条件地启用。具体而言,选件类 CString 支持Unicode。
UAFXCW.LIB |
UAFXCW.PDB |
UAFXCWD.LIB |
UAFXCWD.PDB |
MFCxxU.LIB |
MFCxxU.PDB |
MFCxxU.DLL |
MFCxxUD.LIB |
MFCxxUD.PDB |
MFCxxUD.DLL |
MFCSxxU.LIB |
MFCSxxU.PDB |
MFCSxxUD.LIB |
MFCSxxUD.PDB |
MFCMxxU.LIB |
MFCMxxU.PDB |
MFCMxxU.DLL |
MFCMxxUD.LIB |
MFCMxxUD.PDB |
MFCMxxUD.DLL |
(xx 表示文件版本号;例如,“80 "意味着8.0版。)
CString 基于 TCHAR 数据类型。如果符号 _UNICODE 为您的程序生成定义,TCHAR 定义为类型 wchar_t,16位字符编码类型。否则,TCHAR 定义为 char,常规8位字符编码。因此,在Unicode下,CString 用16位字符组成。不支持Unicode,它由类型组成 char字符。
若要完成Unicode编程应用程序,则还必须:
使用 _T 宏条件字符串进行编码移植到Unicode。
当您传递字符串,"付款注意到函数参数是否在字节需要在字符的一个长度或一个长度。如果使用Unicode字符串,差别很重要。
使用C运行时字符串处理函数的可移植版本。
对于字符和字符的指针使用以下数据类型:
TCHAR 您将使用 char的位置。
LPTSTR 您将使用 char*的位置。
LPCTSTR 您将使用 const char*的位置。CString 提供运算符 LPCTSTR 对 CString 和 LPCTSTR之间的转换。
CString 还提供可识别Unicode的构造函数、赋值运算符和比较运算符。
有关编程的Unicode的相关信息,请参见 Unicode主题。运行库参考 定义其所有字符串处理函数的可移植版本。请参见类 国际化。
MFC为MBCS字符串支持
选件类库也是仅启用多字节字符集,但是,对于双字节字符集(DBCS)。
在多字节字符集,宽字符可以是一个字节。如果它是针对整个系统级两个字节,其第一个字节是特定范围时,代码页正在使用的特殊“尾字节”。主管一起,而“尾字节”指定一个字符编码。
如果符号 _MBCS 为您的程序定义,类型 TCHAR生成,CString,映射到 char。应确定在 CString 的哪些字节是前导字节,以及哪些您是前导字节。帮助您的C运行库提供的函数确定此。
在DBCS下,给定的字符串可以包含任何单字节代ANSI字符、所有双字节字符或二者的组合。这些可能需要在分析字符串的特别小心。这包括 CString 对象。
![]() |
---|
Unicode在MFC的字符串序列化可以读取应用程序的版本正在运行的Unicode和MBCS字符串。您的数据文件可移植在Unicode和程序之间的MBCS版本。 |
它们调用C运行时函数的CString 成员函数使用特殊的“常规文本”版本,也使用Unicode识别功能。因此,例如,因此,如果 CString 功能通常会调用 strcmp,将调用相应的一般文本功能 _tcscmp。根据符号 _MBCS 和 _UNICODE 如何定义,_tcscmp 映射如下所示:
_MBCS 定义 |
_mbscmp |
_UNICODE 定义 |
wcscmp |
两个符号未定义 |
strcmp |
![]() |
---|
符号 _MBCS 和 _UNICODE 互相排斥。 |
一般文本的所有功能映射运行时字符串处理的实例。C运行库参考讨论。特别是,请参见 国际化。
同样,使用“常规”数据类型映射,CString 方法执行。若要启用MBCS和Unicode,MFC的 char使用 char*的 TCHAR,const char*的 LPTSTR 和 LPCTSTR。这些确保MBCS或Unicode的正确映射。