沒有躲過的坑--wstring與string的轉換
阿新 • • 發佈:2019-01-31
wstring 是指的寬位元組。
typedef basic_string<char> string;
typedef basic_string<wchar_t> wstring;
在實際工程中,我們往往需要把string轉換為wstring,你可以會進行百度或是Google,很輕鬆找到轉換的方法。但是這裡就隱含著巨大的坑兒。
看看這個轉換吧:
std::wstring WStringToWString(const std::string& str) {
int size_str = MultiByteToWideChar(CP_UTF8, 0 , str.c_str(), -1, NULL, 0);
wchar_t *wide = new wchar_t[size_str];
MultiByteToWideChar(CP_UTF8, 0, str.c_str(), -1, wide, size_str);
std::wstring return_wstring(wide);
delete[] wide;
wide = NULL;
return return_wstring;
}
也許上面的程式碼幫你解決了問題,但是暫時的。當str = “我是中文”的時候,你會發現,無法完成正確的轉換,導致亂碼。
因此,為了增加你程式的健壯性,還是尋找另一種方法吧,如下:
std::wstring StringToWString(const std::string& str)
{
setlocale(LC_ALL, "chs");
const char* point_to_source = str.c_str();
size_t new_size = str.size() + 1;
wchar_t *point_to_destination = new wchar_t[new_size];
wmemset(point_to_destination, 0 , new_size);
mbstowcs(point_to_destination, point_to_source, new_size);
std::wstring result = point_to_destination;
delete[]point_to_destination;
setlocale(LC_ALL, "C");
return result;
}