#include<iostream> #include<codecvt> #include<string> using namespace std; //vs中将string->wstring //问题:对中文不支持 wstring utf8_to_wstring(const std::string& str){ wstring_convert<codecvt_utf8<wchar_t>> mconv; return mconv.from_bytes(str); } //vs中将wstring->string //问题:对中文不支持 string wstring_to_utf8(const wstring& wstr){ wstring_convert<codecvt_utf8<wchar_t>> mconv; return mconv.to_bytes(wstr); } int main(){ wstring wstr= utf8_to_wstring(string("jiafenggang")); wcout << wstr << endl; wstring wstr1 = L"jiafenggang"; string str = wstring_to_utf8(wstr1); cout << str << endl; return 0; }
如果要对中文支持还是需要WideCharToMultiByte和MultiByteToWideChar
#pragma once #include<Windows.h> #include<string> class UTIL { public: //功能:将char数组 转换为wchar_t数组 //*ansi->char数组 //返回:生成的wchar_t数组 //注意:用户负责释放返回数组内存 //约定:不会改变用户传入的参数,但用户可以改变返回值 static PWSTR ansi2unic(PCSTR ansi); //功能:将wchar_t数组 转换为char数组 //*unic->wchar_t数组 //返回:生成的char数组 //注意:用户负责释放返回数组内存 //约定:不会改变用户传入的参数,但用户可以改变返回值 static PSTR unic2ansi(PCWSTR unic); //功能:将wchar_t数组 转换为string //*unic->wchar_t数组 //返回:生成的string //约定:不会改变用户传入的参数,但用户可以改变返回值 static std::string unic2str(const wchar_t* unic); //功能:将string 转换为wchar_t数组 //*str->要转换的string //返回:生成的wchar_t数组 //注意:用户负责释放返回数组内存 //约定:不会改变用户传入的参数,但用户可以改变返回值 static wchar_t* str2unic(const std::string& str); private: };
#include"util.h" PWSTR UTIL::ansi2unic(PCSTR ansiStr){ PWSTR unicStr=NULL; DWORD len = MultiByteToWideChar(CP_ACP, 0, ansiStr, -1, unicStr, 0); unicStr = new wchar_t[len]; MultiByteToWideChar(CP_ACP, 0, ansiStr, -1, unicStr, len); return unicStr; } PSTR UTIL::unic2ansi(PCWSTR unicStr){ PSTR ansiStr=NULL; DWORD len = WideCharToMultiByte(CP_ACP, 0, unicStr, -1, ansiStr, 0,NULL,NULL); ansiStr = new char[len]; WideCharToMultiByte(CP_ACP, 0, unicStr, -1, ansiStr, len, NULL, NULL); return ansiStr; } std::string UTIL::unic2str(const wchar_t* unicStr){ const char* p = unic2ansi(unicStr); std::string str(p); delete p; return str; } wchar_t* UTIL::str2unic(const std::string& str){ return ansi2unic(str.c_str()); }