【问题标题】:How to properly use MultiByteToWideChar如何正确使用 MultiByteToWideChar
【发布时间】:2014-07-29 21:25:59
【问题描述】:

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

【问题讨论】:

  • 如果函数返回0,需要调用GetLastError获取错误码。返回什么错误码?
  • str 的 UTF-8 编码是否正确,或者可能是其他编码?
  • 返回错误。总是 assert() 这样的值,使用 GetLastError() 找出问题所在。

标签: c++ windows msdn wstring multibyte-functions


【解决方案1】:

来自MSDN documentation

对于 UTF-8 或代码页 54936(GB18030,从 Windows Vista 开始),dwFlags 必须设置为 0 或 MB_ERR_INVALID_CHARS。否则,函数将失败并显示 ERROR_INVALID_FLAGS。

您正在使用 CP_UTF8 但也传递了 MB_COMPOSITE 标志,所以这就是它失败的原因。

【讨论】:

    猜你喜欢
    • 2011-10-05
    • 1970-01-01
    • 2016-05-12
    • 1970-01-01
    • 2013-08-22
    • 1970-01-01
    • 2020-12-04
    • 2012-07-12
    • 2013-01-21
    相关资源
    最近更新 更多