MultiByteToWideChar

【勇芳软件工作室】汉化HomePreviousNext

MultiByteToWideChar函数将字符串映射为宽字符(Unicode)字符串。由该函数映射的字符串不一定来自多字节字符集。

int MultiByteToWideChar(

UINT 【CodePage】,//代码页
DWORD 【dwFlags中】,//字符型选项
LPCSTR 【lpMultiByteStr】,//地址的字符串映射
INT 【cchMultiByte】,//字符串中的字符数
LPWSTR 【lpWideCharStr】,//宽字符缓冲区的地址
INT 【cchWideChar】//缓冲区大小
); 

参数

【CodePage】

指定要用于执行转换的代码页。该参数可以被赋予在系统中安装或可用的任何代码页的值。以下值可用于指定系统默认代码页之一:

含义
CP_ACPANSI代码页
CP_MACCPMacintosh代码页
CP_OEMCPOEM代码页

【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.

也可以看看

WideCharToMultiByte