多字节字符集 (MBCS)

多字节字符集 (MBCS)


Visual C++
支持多字节字符集 (MBCS)

多字节字符集 (MBCS) 是一种替代 Unicode 以支持无法用单字节表示的字符集(如日文和中文)的方法。为国际市场编程时应考虑使用 Unicode 或 MBCS,或使程序能够通过更改开关来生成支持两种字符集之一的程序。

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

有关示例,请参见 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_mbswcs 函数。若要生成 MBCS,请定义 _MBCS 符号。若要生成 Unicode,请定义 _UNICODE 符号。默认情况下,为 MFC 应用程序定义的是 _MBCS。有关更多信息,请参见 Tchar.h 中的一般文本映射

Note注意

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

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

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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要使用多字节字符集 (MBCS) 或者 Unicode 字符集来进行转换,你可以使用一些 C++ 标准库提供的函数来实现。 如果你想将一个窄字符字符串 (char *) 转换为宽字符字符串 (LPCWSTR),你可以使用 MultiByteToWideChar 函数。以下是一个示例代: ```cpp #include <windows.h> #include <iostream> int main() { const char* narrowStr = "Hello, World!"; // 窄字符字符串 int wideStrLength = MultiByteToWideChar(CP_UTF8, 0, narrowStr, -1, NULL, 0); // 获取宽字符字符串的长度 wchar_t* wideStr = new wchar_t[wideStrLength]; // 分配内存来存储宽字符字符串 MultiByteToWideChar(CP_UTF8, 0, narrowStr, -1, wideStr, wideStrLength); // 执行转换 // 打印宽字符字符串 std::wcout << wideStr << std::endl; delete[] wideStr; // 释放内存 return 0; } ``` 如果你想将一个宽字符字符串 (LPCWSTR) 转换为窄字符字符串 (char *),你可以使用 WideCharToMultiByte 函数。以下是一个示例代: ```cpp #include <windows.h> #include <iostream> int main() { LPCWSTR wideStr = L"Hello, World!"; // 宽字符字符串 int narrowStrLength = WideCharToMultiByte(CP_UTF8, 0, wideStr, -1, NULL, 0, NULL, NULL); // 获取窄字符字符串的长度 char* narrowStr = new char[narrowStrLength]; // 分配内存来存储窄字符字符串 WideCharToMultiByte(CP_UTF8, 0, wideStr, -1, narrowStr, narrowStrLength, NULL, NULL); // 执行转换 // 打印窄字符字符串 std::cout << narrowStr << std::endl; delete[] narrowStr; // 释放内存 return 0; } ``` 这些示例代演示了如何使用 Windows API 函数来进行字符串的转换。请确保在使用这些函数之前,包含了 `<windows.h>` 头文件。 希望这能帮助你进行字符集转换!如果你有任何进一步的问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值