WideCharToMultiByte std模拟UTF8

时间:2015-12-02 10:08:39

标签: c++ c++11 widechar

此代码适用于我:

std::wstring wmsg_text = L"キエオイウカクケコサシスセソタチツテア";
char buffer[100] = { 0 };
WideCharToMultiByte(CP_UTF8, 0, wmsg_text.data(), wmsg_text.size(), buffer, sizeof(buffer)-1, NULL, NULL);

我想知道这个代码的跨平台模拟。我期待std::wcstombsstd::codecvt_utf8,但不能猜测如何正确使用它。

2 个答案:

答案 0 :(得分:0)

您想使用std::wcsrtombs,例如:

std::wstring wmsg_text = L"キエオイウカクケコサシスセソタチツテア";
const wchar_t* wstr = wmsg_text.data();
std::mbstate_t state = std::mbstate_t();
int len = 1 + std::wcsrtombs(nullptr, &wstr, 0, &state);
std::vector<char> mbstr(len);
std::wcsrtombs(&mbstr[0], &wstr, mbstr.size(), &state);
char* buffer = mbstr.data();

答案 1 :(得分:0)

此代码也正常运行:

std::wstring_convert<std::codecvt_utf8<wchar_t>> conv;
std::string u8str = conv.to_bytes(msg);