支持 Unicode

Unicode 是支持所有字符集(包括无法以单个字节表示的字符集)的规范。 如果要为国际市场编程,建议使用 Unicode 或多字节字符集 (MBCS)。 或者,对程序进行编码,以便可通过更改开关来构建它。

宽字符是双字节多语言字符代码。 数以万计的字符都可根据 Unicode 规范表示为使用 UTF-16 编码的单一宽字符,这些字符由全球现代计算中使用的几乎所有字符组成,包括技术符号和特殊发布字符。 无法仅以一个宽字符表示的字符可通过使用 Unicode 代理项对功能以 Unicode 对表示。 由于几乎每个常用字符都在 UTF-16 中以单个 16 位宽字符表示,因此使用宽字符简化了使用国际字符集进行的编程。 使用 UTF-16LE(为小端)编码的宽字符是 Windows 的本机字符格式。

宽字符串表示为一个 wchar_t[] 数组,由 wchar_t* 指针指向它。 通过使用字母 L 作为该字符的前缀,可将任何 ASCII 字符表示为宽字符。 例如,L'\0' 是(16 位)NULL 终止宽字符。 同样,通过使用字母 L 作为 ASCII 文本的前缀 (L"Hello"),可将任何 ASCII 字符串文本表示为宽字符字符串。

通常,宽字符在内存中占用的空间比多字节字符多,但处理速度更快。 另外,在多字节编码中一次只能表示一个区域设置,而世界上的所有字符集可同时以 Unicode 表示形式表示。

MFC 框架完全支持 Unicode,MFC 通过使用可移植的宏来实现对 Unicode 的支持,如下表所示。

MFC 中的可移植数据类型

不可移植的数据类型 替换为此宏
charwchar_t _TCHAR
char*LPSTR(Win32 数据类型)、LPWSTR LPTSTR
const char*LPCSTR(Win32 数据类型)、LPCWSTR LPCTSTR

CString 类使用 _TCHAR 作为其基类,并提供构造函数和运算符以方便转换。 通过使用与用于处理 Windows ANSI 字符集相同的逻辑,可编写 Unicode 的大多数字符串操作,但基本操作单位是 16 位字符,而非 8 位字节。 与使用多字节字符集不同,不必(也不应)将 Unicode 字符视为两个不同的字节。 但是,必须处理宽字符的代理项对代表的单个字符的可能性。 通常,不要编写假定字符串长度与其包含的字符数(无论是窄字符还是宽字符)相同的代码。

你希望做什么?

另请参阅

文本和字符串
支持使用 wmain