24,854
社区成员
发帖
与我相关
我的任务
分享
#include <QCoreApplication>
#include <QDebug>
#include <iostream>
using namespace std;
std::string ws2s(const std::wstring &ws)
{
size_t i;
std::string curLocale = setlocale(LC_ALL, NULL);
setlocale(LC_ALL, "");
const wchar_t* _source = ws.c_str();
size_t _dsize = 2 * ws.size() + 1;
char* _dest = new char[_dsize];
memset(_dest, 0x0, _dsize);
wcstombs_s(&i, _dest, _dsize, _source, _dsize);
std::string result = _dest;
delete[] _dest;
setlocale(LC_ALL, curLocale.c_str());
return result;
}
std::wstring s2ws(const std::string &s)
{
size_t i;
std::string curLocale = setlocale(LC_ALL, NULL);
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, 0x0, _dsize);
mbstowcs_s(&i, _dest, _dsize, _source, _dsize);
std::wstring result = _dest;
delete[] _dest;
setlocale(LC_ALL, curLocale.c_str());
return result;
}
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
std::string strTest = "1234中文abcd";
std::wstring destWStr = s2ws(strTest);
return a.exec();
}
#include <afx.h>
#include <string>
#include <iostream>
using namespace std;
#pragma warning (disable: 4996)
std::string ws2s(const std::wstring &ws)
{
size_t i;
std::string curLocale = setlocale(LC_ALL, NULL);
setlocale(LC_ALL, "");
const wchar_t* _source = ws.c_str();
size_t _dsize = 2 * ws.size() + 1;
char* _dest = new char[_dsize];
memset(_dest, 0x0, _dsize);
wcstombs_s(&i, _dest, _dsize, _source, _dsize);
std::string result = _dest;
delete[] _dest;
setlocale(LC_ALL, curLocale.c_str());
return result;
}
std::wstring s2ws(const std::string &s)
{
size_t i;
std::string curLocale = setlocale(LC_ALL, NULL);
setlocale(LC_ALL, "");
const char* _source = s.c_str();
size_t _dsize = s.size() + 1;
wchar_t* _dest = new wchar_t[_dsize];
wmemset(_dest, 0x0, _dsize);
mbstowcs_s(&i, _dest, _dsize, _source, _dsize);
std::wstring result = _dest;
delete[] _dest;
setlocale(LC_ALL, curLocale.c_str());
return result;
}
int main()
{
std::string strTest = "1234中文abcd";
std::wstring destWStr = s2ws(strTest);
return 0;
}
#include <codecvt>
std::string ws2s(const std::wstring &ws)
{
std::wstring_convert<std::codecvt_utf16<wchar_t, 0x10fffful,
std::codecvt_mode::little_endian>, wchar_t> cv;
//std::locale::global(std::locale(""));
//setlocale(LC_CTYPE, "");
return cv.to_bytes(ws);
}
std::wstring s2ws(const std::string &s)
{
std::wstring_convert<std::codecvt_utf16<wchar_t, 0x10fffful,
std::codecvt_mode::little_endian>, wchar_t> cv;
//std::locale::global(std::locale(""));
//setlocale(LC_CTYPE, "");
return cv.from_bytes(s);
}