0

这段代码对我来说正常工作:

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::wcstombswith std::codecvt_utf8,但无法猜测如何以正确的方式使用它。

4

2 回答 2

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();
于 2015-12-02T10:33:54.037 回答
0

此代码也可以正常工作:

std::wstring_convert<std::codecvt_utf8<wchar_t>> conv;
std::string u8str = conv.to_bytes(msg);
于 2015-12-02T11:29:37.820 回答