1. 程式人生 > >沒有躲過的坑--wstring與string的轉換

沒有躲過的坑--wstring與string的轉換

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; }