#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()); }