#include#include #include using namespace std;//vs中将string->wstring//问题:对中文不支持wstring utf8_to_wstring(const std::string& str){ wstring_convert > mconv; return mconv.from_bytes(str);}//vs中将wstring->string//问题:对中文不支持string wstring_to_utf8(const wstring& wstr){ wstring_convert > 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#include 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());}