2015-12-02 91 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);