方法一:使用c++11的特性:
std::wstring_convert<std::codecvt_utf8<wchar_t>> conv;
例子如下:
#include <iostream>
#include <string>
#include <locale>
#include <codecvt>
using namespace std;
int main()
{
std::wstring str = L"123,宋体!";
std::wstring_convert<std::codecvt_utf8<wchar_t>> conv;
std::string narrowStr = conv.to_bytes(str);
std::wstring wideStr = conv.from_bytes(narrowStr);
while (1);
return 0;
}
方法二:不使用库函数,直接转换
std::string ws2s(const std::wstring& str)
{
int tm1 = GetCurTime();
char* pElementText;
int iTextLen;
// wide char to multi char
iTextLen = WideCharToMultiByte(CP_ACP, 0, str.c_str(), -1, NULL, 0, NULL, NULL);
pElementText = new char[iTextLen + 1];
memset((void*)pElementText, 0, sizeof(char)* (iTextLen + 1));
::WideCharToMultiByte(CP_ACP, 0, str.c_str(), -1, pElementText, iTextLen, NULL, NULL);
std::string strText;
strText = pElementText;
delete[] pElementText;
int tm2 = GetCurTime() - tm1;
return strText;
}