上QT原始碼:
#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();
}
執行效果:

上VS原始碼:
#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;
}
VS執行結果:

uj5u.com熱心網友回復:
對電腦而言沒有亂碼,只有二進制位元組;對人腦才有亂碼。啊 GBK:0xB0 0xA1,Unicode-16 LE:0x4A 0x55,Unicode-16 BE:0x55 0x4A,UTF-8:0xE5 0x95 0x8Auj5u.com熱心網友回復:
Qt msvc編譯器用你的代碼試了沒問題 不要在代碼直接給中文 從檔案讀試試看 可能是你Qt Creator配置的問題uj5u.com熱心網友回復:
我感覺是編碼格式的問題, 但在哪里改 不太清除。
uj5u.com熱心網友回復:
源代碼另存為,選你希望的字符編碼,……
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/263933.html
標籤:工具平臺和程序庫
上一篇:vs2010 F5除錯,大部分斷點正常,其中某一個斷點為空心不可用
下一篇:各類資料庫連接池
