window下 ANSI Unicode utf8之间相互转换

2018-06-17 23:20:00来源:未知 阅读 ()

新老客户大回馈,云服务器低至5折

//CString to string的转可能只适用于某些编码情况
string CStringToChar(const CString& strSrc)
{
  CString strTmp(strSrc);
  string str(strTmp.GetBuffer(strTmp.GetLength()));
  strTmp.ReleaseBuffer();
  return str;
}

wstring AnsiToUnicode(const string& buf)
{
  int len = ::MultiByteToWideChar(CP_ACP, 0, buf.c_str(), -1, NULL, 0);
  if (len == 0) return L"";

  wstring strUnicode;
  strUnicode.resize(len);
  ::MultiByteToWideChar(CP_ACP, 0, buf.c_str(), -1, (wchar_t*)strUnicode.c_str(), len);

  return strUnicode;
}

string UnicodeToAnsi(const wstring& buf)
{
  int len = ::WideCharToMultiByte(CP_ACP, 0, buf.c_str(), -1, NULL, 0, NULL, NULL);
  if (len == 0) return "";

  string strUtf8;
  strUtf8.resize(len);
  ::WideCharToMultiByte(CP_ACP, 0, buf.c_str(), -1, (char*)strUtf8.c_str(), len, NULL, NULL);

  return strUtf8;
}

wstring Utf8ToUnicode(const string& buf)
{
  int len = ::MultiByteToWideChar(CP_UTF8, 0, buf.c_str(), -1, NULL, 0);
  if (len == 0) return L"";

  wstring strUnicode;
  strUnicode.resize(len);
  ::MultiByteToWideChar(CP_UTF8, 0, buf.c_str(), -1, (wchar_t*)strUnicode.c_str(), len);

  return strUnicode;
}

string UnicodeToUtf8(const wstring& buf)
{
  int len = ::WideCharToMultiByte(CP_UTF8, 0, buf.c_str(), -1, NULL, 0, NULL, NULL);
  if (len == 0) return "";

  string strUtf8;
  strUtf8.resize(len);
  ::WideCharToMultiByte(CP_UTF8, 0, buf.c_str(), -1, (char*)strUtf8.c_str(), len, NULL, NULL);

  return strUtf8;
}

string AnsiToUtf8(const string& strSrc)
{
  return UnicodeToUtf8(AnsiToUnicode(strSrc));
}

string AnsiToUtf8(const CString& strSrc)
{
  return UnicodeToUtf8(AnsiToUnicode(CStringToChar(strSrc)));
}

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:二分搜索

下一篇:基础