#include < string>
std:: string ws2s( const std::wstring& ws)
{
    std:: string curLocale = setlocale(LC_ALL, NULL);         //  curLocale = "C";
    setlocale(LC_ALL, "chs");
     const wchar_t* _Source = ws.c_str();
    size_t _Dsize = 2 * ws.size() + 1;
     char *_Dest =  new  char[_Dsize];
    memset(_Dest,0,_Dsize);
    wcstombs(_Dest,_Source,_Dsize);
    std:: string result = _Dest;
    delete []_Dest;
    setlocale(LC_ALL, curLocale.c_str());
     return result;
}

std::wstring s2ws( const std:: string& s)
{
    setlocale(LC_ALL, "chs"); 
     const  char* _Source = s.c_str();
    size_t _Dsize = s.size() + 1;
    wchar_t *_Dest =  new wchar_t[_Dsize];
    wmemset(_Dest, 0, _Dsize);
    mbstowcs(_Dest,_Source,_Dsize);
    std::wstring result = _Dest;
    delete []_Dest;
    setlocale(LC_ALL, "C");
     return result;
}
std::wstring  StringToWString(const std::string& s)
{
        std::wstring wszStr; 

        int nLength = MultiByteToWideChar( CP_ACP, 0, s.c_str(), -1, NULL, NULL );
        wszStr.resize(nLength);
        LPWSTR lpwszStr = new wchar_t[nLength];
        MultiByteToWideChar( CP_ACP, 0, s.c_str(), -1, lpwszStr, nLength );
        wszStr = lpwszStr;
        delete [] lpwszStr;

        return wszStr;
}