其他分享
首页 > 其他分享> > c无法将字符串转换为wstring

c无法将字符串转换为wstring

作者:互联网

我想将字符串变量转换为wstring,原因是某些德语字符在对变量进行substr时会引起问题.当这些特殊字符出现在起始位置时,起始位置将被篡改. (例如:对于“ä”,size()返回2而不是1)

我知道以下转换有效:

wstring ws = L"ä";

由于我正在尝试转换变量,因此我想知道是否有其他替代方法,例如

wstring wstr = L"%s"+str //this is syntaxically wrong, but wanted sth alike

除此之外,我已经尝试了以下example将字符串转换为wstring:

string foo("ä"); 
wstring_convert<codecvt_utf8<wchar_t>> converter;
wstring wfoo = converter.from_bytes(foo.data());
cout << foo.size() << endl;
cout << wfoo.size() << endl;

,但出现类似

‘wstring_convert’ was not declared in this scope

我正在使用ubuntu 14.04,并且main.cpp是使用cmake编译的.谢谢你的帮助!

解决方法:

来自“ haha​​kubile”的解决方案为我工作:

std::wstring s2ws(const std::string& s) {
    std::string curLocale = setlocale(LC_ALL, ""); 
    const char* _Source = s.c_str();
    size_t _Dsize = mbstowcs(NULL, _Source, 0) + 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, curLocale.c_str());
    return result;
}

但是返回值不是100%正确的:

string s = "101446012MaßnStörfall   PAt  #Maßnahme Störfall                      00810000100121000102000020100000000000000";
wstring ws2 = s2ws(s);
cout << ws2.size() << endl; // returns 110 which is correct
wcout << ws2.substr(29,40) << endl; // returns #Ma�nahme St�rfall with symbols

我想知道为什么它用符号代替了德语字符.

再次感谢!

标签:substr,special-characters,wstring,linux,c-4
来源: https://codeday.me/bug/20191121/2051570.html