方法一:使用c++11的特性:
std::wstring_convert> 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; }