各位大家好,现在本人需要将string转为wstring,其中字符串有字母和中文(如:”/usr/工具”)
本人在网上找了一下好多人多说一些代码能够转换:
[code=c#include<iostream>
#include<string>
#include<stdlib.h>
using namespace std;
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;
}
int main()
{
string filepath = “ise方法”;
//wstring b(filepath.begin(),filepath.end());
wstring wstr = s2ws(filepath);
wcout << wstr<<b<<endl;
}][/code]
输出的结果:ise
本人想问一下一下这是为什么呢?
还有其他的转换方法吗?
本人在网上找了一下好多人多说一些代码能够转换:
[code=c#include<iostream>
#include<string>
#include<stdlib.h>
using namespace std;
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;
}
int main()
{
string filepath = “ise方法”;
//wstring b(filepath.begin(),filepath.end());
wstring wstr = s2ws(filepath);
wcout << wstr<<b<<endl;
}][/code]
输出的结果:ise
本人想问一下一下这是为什么呢?
还有其他的转换方法吗?
解决方案
40
gb2312字符转 wstring:
std::wstring Fun(std::string const &strGb2312)
{
std::vector<wchar_t> buff(strGb2312.size());
std::locale loc(“zh-CN”);
wchar_t* pwszNext = nullptr;
const char* pszNext = nullptr;
mbstate_t state = {};
int res = std::use_facet<std::codecvt<wchar_t, char, mbstate_t> >
(loc).in(state,
strGb2312.data(), strGb2312.data() + strGb2312.size(), pszNext,
buff.data(), buff.data() + buff.size(), pwszNext);
if (std::codecvt_base::ok == res)
{
return std::wstring(buff.data(), pwszNext);
}
return “”;
}
以上c++11才支持。
std::wstring Fun(std::string const &strGb2312)
{
std::vector<wchar_t> buff(strGb2312.size());
std::locale loc(“zh-CN”);
wchar_t* pwszNext = nullptr;
const char* pszNext = nullptr;
mbstate_t state = {};
int res = std::use_facet<std::codecvt<wchar_t, char, mbstate_t> >
(loc).in(state,
strGb2312.data(), strGb2312.data() + strGb2312.size(), pszNext,
buff.data(), buff.data() + buff.size(), pwszNext);
if (std::codecvt_base::ok == res)
{
return std::wstring(buff.data(), pwszNext);
}
return “”;
}
以上c++11才支持。