std::wstring ansi2unicode(const std::string& ansi) { if (ansi.empty()) { return std::wstring(L""); } int len = MultiByteToWideChar(CP_ACP, 0, ansi.c_str(), -1, NULL, 0); std::wstring unicode(len + 2, L'\0'); len = MultiByteToWideChar(CP_ACP, 0, ansi.c_str(), ansi.size(), &unicode[0], len); return unicode; } std::string unicode2ansi(const std::wstring& unicode) { if (unicode.empty()) { return std::string(""); } int len = WideCharToMultiByte(CP_ACP, 0, unicode.c_str(), -1, NULL, 0, NULL, NULL); std::string ansi(len + 1, '\0'); WideCharToMultiByte(CP_ACP, 0, unicode.c_str(), unicode.size(), &ansi[0], len, NULL, NULL); return ansi; }
std::wstring ansi2unicode(const std::string& ansi) { if (ansi.empty()) { return std::wstring(_T("")); } int len = MultiByteToWideChar(CP_ACP, 0, ansi.c_str(), -1, NULL, 0); wchar_t *tmp = new wchar_t[len+1]; memset(tmp, 0, sizeof(wchar_t)*(len+1)); MultiByteToWideChar(CP_ACP, 0, ansi.c_str(), ansi.size(), tmp, len); std::wstring ret = tmp; delete [] tmp; return ret; } std::string unicode2ansi(const std::wstring& unicode) { if (unicode.empty()) { return std::string(""); } int len = WideCharToMultiByte(CP_ACP, 0, unicode.c_str(), -1, NULL, 0, NULL, NULL); char *tmp = new char[len+1]; memset(tmp, 0, sizeof(char)*(len+1)); WideCharToMultiByte(CP_ACP, 0, unicode.c_str(), unicode.size(), tmp, len, NULL, NULL); std::string ret = tmp; delete [] tmp; return ret; } std::string utf2ansi(const std::string& utf) { if (utf.empty()) { return utf; } int len1 = MultiByteToWideChar(CP_UTF8, 0, utf.c_str(), -1, NULL, 0); wchar_t *tmp1 = new wchar_t[len1+1]; memset(tmp1, 0, sizeof(wchar_t)*(len1+1)); MultiByteToWideChar(CP_UTF8, 0, utf.c_str(), utf.size(), tmp1, len1); int len2 = WideCharToMultiByte(CP_ACP, 0, tmp1, -1, NULL, 0, NULL, NULL); char *tmp2 = new char[len2+1]; memset(tmp2, 0, sizeof(char)*(len2+1)); WideCharToMultiByte(CP_ACP, 0, tmp1, len1, tmp2, len2, NULL, NULL); std::string ret = tmp2; delete [] tmp1; delete [] tmp2; return ret; } std::string ansi2utf(const std::string& ansi) { if (ansi.empty()) { return ansi; } int len1 = MultiByteToWideChar(CP_ACP, 0, ansi.c_str(), -1, NULL, 0); wchar_t *tmp1 = new wchar_t[len1+1]; memset(tmp1, 0, sizeof(wchar_t)*(len1+1)); MultiByteToWideChar(CP_ACP, 0, ansi.c_str(), ansi.size(), tmp1, len1); int len2 = WideCharToMultiByte(CP_UTF8, 0, tmp1, -1, NULL, 0, NULL, NULL); char *tmp2 = new char[len2+1]; memset(tmp2, 0, sizeof(char)*(len2+1)); WideCharToMultiByte(CP_UTF8, 0, tmp1, len1, tmp2, len2, NULL, NULL); std::string ret = tmp2; delete [] tmp1; delete [] tmp2; return ret; }