2015-12-02 62 views
0

此代码是正确workng对我来说:调用WideCharToMultiByte STD模拟UTF8

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,但不能猜测如何通过正确的方式来使用它。

+1

对于'codecvt_utf8'的使用看看在http://计算器。 com/a/12903901/2131459 - 但请注意,评论说这种方法不能可靠地工作! – Chris

+0

源文件中的嵌入unicode不能保证能正常工作,这取决于你的编译器。 –

回答

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(); 
0

此代码工作正常,太:

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