如何正确使用MultiByteToWideChar函数

4

我正在使用MultiByteToWideChar将字符串转换为宽字符串。我首先尝试获取所需的wstring大小。根据文档,将0作为最后一个参数传递应该可以实现这一点。使用MultiByteToWideChar(CP_UTF8, MB_COMPOSITE, str.c_str(), -1, nullptr, 0);返回0作为wstring缓冲区的所需大小。我已经验证了str是一个非空字符串。我在这里做错了什么?


如果函数返回0,则需要调用GetLastError来获取错误代码。返回什么错误代码? - Harry Johnston
1
“str” 是否已经正确地采用 UTF-8 编码,或者它可能使用了其他编码方式? - Mark Ransom
这是一个错误返回。始终使用assert()断言这些值,并使用GetLastError()查找出错原因。 - Hans Passant
1个回答

7
根据MSDN文档说明:对于UTF-8或代码页54936(GB18030,从Windows Vista开始),dwFlags必须设置为0或MB_ERR_INVALID_CHARS。否则,函数将返回ERROR_INVALID_FLAGS。
您正在使用CP_UTF8但同时传递了MB_COMPOSITE标志,因此它无法正常工作。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接