支持多字节字符集 (MBCS)

多字节字符集 (MBCS) 是一种旧的方式以支持无法用单字节表示的字符集(如日文和中文)的方法。 如果执行新开发,对于所有的文本字符串应该使用Unicode,除非最终用户没有看到系统字符串。 MBCS 是传统技术,不建议用于新开发中。

最常见的 MBCS 实现是双字节字符集 (DBCS)。 一般来说,Visual C++(尤其是 MFC)完全支持 DBCS。

警告

在 Visual Studio 2013 及更高版本中,多的 byle 字符编码的 (mbcs) MFC 库将提供作为附加程序给 Visual Studio,以及对 Visual Studio 仅客户 (,专业版和旗舰版可用) 从 MSDN 免费下载网站。

库在驱动器上需要大约 440 MB,并且安装包括库中的所有本地化版本。您可以将 Visual Studio 专业版,高级版或旗舰版安装在任何机器上安装,并且它具有启用框的 MFC 功能

如果您卸载或修复 Visual Studio,则MBCS 库也会被卸载或修复。但是,如果您只是移除 MFC 功能,则MBCS 库将保留在您的系统中。如果您修复 MBCS 库,Visual Studio 不会被任何方式修改。

Visual Studio 2013 可再发行组件包后仍将包括 MBCS MFC DLL。无需额外步骤即可将 DLLs 重新分配至您的计算机。

有关示例,请参见 MFC 源代码文件。

对于语言使用大字符集的市场所使用的平台,代替 Unicode 的最佳方法是 MBCS。 MFC 通过使用可国际化的数据类型和 C 运行时函数来支持 MBCS。 您也应在自己的代码中这样操作。

在 MBCS 下,字符被编码为单字节或双字节。 在双字节字符中,第一个字节(即前导字节)表示它和下一个字节将被解释为一个字符。 第一个字节来自留作前导字节的代码范围。 哪个范围的字节可以用作前导字节取决于所使用的代码页。 例如,日文代码页 932 使用 0x81 到 0x9F 范围内的字节作为前导字节,而朝鲜语代码页 949 则使用其他范围的字节。

在 MBCS 编程中需考虑下列所有因素。

  • 环境中的 MBCS 字符
    MBCS 字符可以出现在文件名和目录名等字符串中。

  • 编辑操作
    MBCS 应用程序上的编辑操作应在字符上操作,而非在字节上操作。 插入符号不应拆分字符,向右键应向右移动一个字符等。 Delete 应删除一个字符;Undo 则应将字符重新插入。

  • 字符串处理
    在使用 MBCS 的应用程序中,字符串处理引起特殊问题。 两种宽度的字符混合在一个字符串中;因此必须记住检查前导字节。

  • 运行库支持
    C 运行库和 MFC 支持单字节、MBCS 和 Unicode 编程。 单字节字符串用 str 运行时函数族处理,MBCS 字符串用相应的 _mbs 函数处理,而 Unicode 字符串用相应的 wcs 函数处理。 MFC 类成员函数的实现使用可移植运行时函数,这些可移植运行时函数在正常情况下映射到标准 str 函数族、MBCS 函数或 Unicode 函数,如“MBCS/Unicode 可移植性”中所述。

  • MBCS/Unicode 可移植性
    使用 Tchar.h 头文件可以用同一个源生成单字节的 MBCS 应用程序和 Unicode 应用程序。 Tchar.h 定义以 _tcs 为前缀的宏,这些宏根据相应的情况映射到 str、_mbs 或 wcs 函数。 若要生成 MBCS,请定义 _MBCS 符号。 若要生成 Unicode,请定义 _UNICODE 符号。 默认情况下,为 MFC 应用程序定义的是 _MBCS。 有关更多信息,请参见 Tchar.h 中的一般文本映射

备注

如果同时定义了 _UNICODE_MBCS,则行为不确定。

Mbctype.h 和 Mbstring.h 头文件定义了 MBCS 特定的函数和宏,在某些情况下可能需要这些函数和宏。 例如,_ismbblead 能告诉您某个字符串中的特定字节是否为前导字节。

为获得国际可移植性,使用 Unicode 或多字节字符集 (MBCS) 编码程序。

你希望做什么?

请参见

概念

Visual C++ 中的文本和字符串

Visual C++ 中的 MBCS 支持