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编译的.谢谢你的帮助!
解决方法:
来自“ hahakubile”的解决方案为我工作:
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