C ++无法将字符串转换为wstring

祖布斯

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

我知道以下转换有效:

wstring ws = L"ä";

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

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

除此之外,我已经尝试了以下示例将string转换为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

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

再次感谢!

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在C ++中将字符串转换为wstring

来自分类Dev

C# 无法将类型转换为字符串

来自分类Dev

C#:将字符列表转换为字符串

来自分类Dev

无法将C ++字符串向量转换为V8数组

来自分类Dev

无法将C ++字符串向量转换为V8数组

来自分类Dev

无法将类型void隐式转换为字符串C#

来自分类Dev

无法将参数值从字符串转换为十进制。C#?

来自分类Dev

C#JSON导入:无法将字符串转换为字节数组

来自分类Dev

无法将小型C#“随机字符串”函数转换为Haskell

来自分类Dev

CS0029 C#'无法将类型string []隐式转换为字符串'

来自分类Dev

无法将返回的字符串从服务转换为 c# 中的 int

来自分类Dev

我无法在 C# 中正确地将字符串转换为 Int

来自分类Dev

C# 错误无法将 sytem.text.regularexpressions.match 转换为字符串

来自分类Dev

C ++:将C字符串转换为std:string

来自分类Dev

将C ++字符串操作转换为C的问题

来自分类Dev

C#将字符串转换为字典

来自分类Dev

C#将字符串转换为整数

来自分类Dev

将c#字符串[]转换为json

来自分类Dev

将JSON字符串转换为C#字典

来自分类Dev

将字符串转换为日期Objective-C

来自分类Dev

将字符串转换为double或float C#

来自分类Dev

C ++将int转换为内联字符串

来自分类Dev

C#将类转换为查询字符串

来自分类Dev

将ZZ(NTL)转换为C中的字符串

来自分类Dev

C ++ ::将ASCII值转换为字符串

来自分类Dev

将D字符串转换为C char *

来自分类Dev

C ++如何将字符串转换为指针?

来自分类Dev

将字符串转换为C ++中的float

来自分类Dev

C#MVC-将字符串转换为变量