如何使用 window api 转换字符集?(std::string与std::wstring的相互转换)

//宽字符转多字节
std::string W2A(const std::wstring& utf8) { int buffSize = WideCharToMultiByte(CP_ACP, NULL, utf8.c_str(), -1, NULL, NULL, NULL, FALSE); char *gbk = new char[buffSize+1]; memset(gbk, 0, buffSize + 1); WideCharToMultiByte(CP_ACP, NULL, utf8.c_str(), -1, gbk, buffSize, NULL, FALSE); std::string result(gbk); delete[] gbk; gbk = nullptr; return result; } //多字节转宽字符 std::wstring A2W(const std::string& gbk) { int buffSize = MultiByteToWideChar(CP_ACP, NULL, gbk.c_str(), -1, NULL, NULL); wchar_t* utf8 = new wchar_t[buffSize+2]; memset(utf8, 0, buffSize + 2); MultiByteToWideChar(CP_ACP, NULL, gbk.c_str(), -1, utf8, buffSize); std::wstring result(utf8); delete[] utf8; utf8 = nullptr; return result; }
//宽字符转多字节
std::string W2A(const std::wstring& utf8) { int buffSize = WideCharToMultiByte(CP_ACP, NULL, utf8.c_str(), -1, NULL, NULL, NULL, FALSE); char *gbk = new char[buffSize+1]; memset(gbk, 0, buffSize + 1); WideCharToMultiByte(CP_ACP, NULL, utf8.c_str(), -1, gbk, buffSize, NULL, FALSE); std::string result(gbk); delete[] gbk; gbk = nullptr; return result; } //多字节转宽字符 std::wstring A2W(const std::string& gbk) { int buffSize = MultiByteToWideChar(CP_ACP, NULL, gbk.c_str(), -1, NULL, NULL); wchar_t* utf8 = new wchar_t[buffSize+2]; memset(utf8, 0, buffSize + 2); MultiByteToWideChar(CP_ACP, NULL, gbk.c_str(), -1, utf8, buffSize); std::wstring result(utf8); delete[] utf8; utf8 = nullptr; return result; }

猜你喜欢

转载自www.cnblogs.com/findumars/p/10692659.html