MultiByteToWideChar函数将字符串映射为宽字符(Unicode)字符串。由该函数映射的字符串不一定来自多字节字符集。
int MultiByteToWideChar(
UINT 【CodePage】, | //代码页 |
DWORD 【dwFlags中】, | //字符型选项 |
LPCSTR 【lpMultiByteStr】, | //地址的字符串映射 |
INT 【cchMultiByte】, | //字符串中的字符数 |
LPWSTR 【lpWideCharStr】, | //宽字符缓冲区的地址 |
INT 【cchWideChar】 | //缓冲区大小 |
); |
参数
【CodePage】
指定要用于执行转换的代码页。该参数可以被赋予在系统中安装或可用的任何代码页的值。以下值可用于指定系统默认代码页之一:
值 | 含义 |
CP_ACP | ANSI代码页 |
CP_MACCP | Macintosh代码页 |
CP_OEMCP | OEM代码页 |
【dwFlags中】
一组位标志,指示是否转换为预先组合或复合宽字符(如果存在复合形式),是否使用字形字符代替控制字符,以及如何处理无效字符。您可以指定以下标志常量的组合:
值 | 含义 |
MB_PRECOMPOSED | 始终使用预先配置的字符__,即基本字符和非空白字符具有单个字符值的字符。这是默认的翻译选项。不能与MB_COMPOSITE一起使用。 |
MB_COMPOSITE | 始终使用复合字符__,即基本字符和非空格字符具有不同字符值的字符。不能与MB_PRECOMPOSED一起使用。 |
MB_ERR_INVALID_CHARS | 如果函数遇到无效的输入字符,则失败,GetLastError返回ERROR_NO_UNICODE_TRANSLATION。 |
MB_USEGLYPHCHARS | 使用字形字符而不是控制字符。 |
复合字符由基本字符和非空格字符组成,每个字符具有不同的字符值。预先配置的字符对于基本/非间距字符组合具有单个字符值。在字符【】中,【e】是基本字符,而重音符号是非空间字符。
该函数的默认行为是转换为预先设置的形式。如果预先形式不存在,则该函数将尝试转换为复合形式。
标志MB_PRECOMPOSED和MB_COMPOSITE是互斥的。可以设置MB_USEGLYPHCHARS标志和MB_ERR_INVALID_CHARS,而不管其他标志的状态如何。
【lpMultiByteStr】
指向要转换的字符串。
【cchMultiByte】
指定【lpMultiByteStr】参数指向的字符串的大小(以字节为单位)。如果此值为-1,则假定字符串为空终止,并自动计算长度。
【lpWideCharStr】
指向接收翻译字符串的缓冲区。
【cchWideChar】
指定由【lpWideCharStr】参数指向的缓冲区的宽字符大小。如果该值为零,则该函数返回所需的缓冲区大小(宽字符),不会使用【lpWideCharStr】缓冲区。
返回值
如果函数成功,并且【cchWideChar】非零,则返回值是写入【lpWideCharStr】指向的缓冲区的宽字符数。
如果函数成功,并且【cchWideChar】为零,则返回值是可接收转换字符串的缓冲区所需的大小(宽字符)。
如果函数失败,返回值为零。要获取扩展错误信息,请调用GetLastError.GetLastError可能会返回以下错误代码之一:
ERROR_INSUFFICIENT_BUFFER |
ERROR_INVALID_FLAGS |
ERROR_INVALID_PARAMETER |
ERROR_NO_UNICODE_TRANSLATION |
备注
【lpMultiByteStr】和【lpWideCharStr】指针不能相同。如果它们相同,则该函数失败,并且GetLastError返回值ERROR_INVALID_PARAMETER。
如果设置了MB_ERR_INVALID_CHARS并且在源字符串中遇到无效字符,则该函数将失败。如果未设置MB_ERR_INVALID_CHARS但不是源字符串中的默认字符,或者在字符串中找到引导字节,并且DBCS字符串没有有效的字节,则无效字符将转换为默认字符。当找到无效字符,并设置MB_ERR_INVALID_CHARS时,函数返回0,并设置错误ERROR_NO_UNICODE_TRANSLATION GetLastError.
也可以看看