不同编码之间的转换(UTF-8,UNICODE,多字节,宽字节)
2022-01-16
86
0
BOOL CUtils::CharToWchar(std::string src, std::wstring& dest)
{
int dwMinSize = MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, src.c_str(), -1, NULL, 0);
if (dwMinSize == 0)
{
return 0;
}
dest.resize(dwMinSize);
int nlen = MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, src.c_str(), -1, &dest.at(0), dwMinSize);
return nlen > 0;
}
BOOL CUtils::WcharToChar(std::wstring src, std::string& dest)
{
int dwMinSize = WideCharToMultiByte(CP_ACP, NULL, src.c_str(), -1, NULL, 0, NULL, FALSE);
if (dwMinSize == 0)
{
return 0;
}
dest.resize(dwMinSize);
int nlen = WideCharToMultiByte(CP_ACP, NULL, src.c_str(), -1, &dest.at(0), dwMinSize, NULL, FALSE);
return nlen > 0;
}
BOOL CUtils::UTF8ToWchar(std::string src, std::wstring& dest)
{
//预转换,得到所需空间的大小;
int wcsLen = ::MultiByteToWideChar(CP_UTF8, NULL, src.c_str(), src.size(), NULL, 0);
if (wcsLen == 0)
{
return 0;
}
dest.resize(wcsLen);
int nLen = ::MultiByteToWideChar(CP_UTF8, NULL, src.c_str(), src.size(), &dest.at(0), wcsLen);
return wcsLen > 0;
}
BOOL CUtils::WcharToUTF8(std::wstring src, std::string& dest)
{
int dwMinSize = WideCharToMultiByte(CP_UTF8, NULL, src.c_str(), -1, NULL, 0, NULL, FALSE);
if (dwMinSize == 0)
{
return 0;
}
dest.resize(dwMinSize);
int nLen = WideCharToMultiByte(CP_UTF8, 0, src.c_str(), -1, &dest.at(0), dwMinSize, NULL, NULL);
return nLen > 0;
}