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;
}