Friday, October 21, 2011

Convert UNICODE to ANSI...and UTF-8 to UNICODE

string sPath;

sPath = ConvertAnsiToUnicode(argv[0],_tcslen(argv[0]));

------------------------

string ConvertAnsiToUnicode(wchar_t *szString,int nSzie)
{
int cbMultiByte = ::WideCharToMultiByte(CP_UTF8, 0, szString, nSzie+1, NULL, 0,
NULL, NULL);

char* pMultiByteStr = NULL;
string result;

if (cbMultiByte > 0)

{

pMultiByteStr = new char[cbMultiByte];

cbMultiByte = ::WideCharToMultiByte(CP_UTF8, 0, szString, nSzie+1, pMultiByteStr,
cbMultiByte, NULL, NULL);

if (cbMultiByte > 0 && pMultiByteStr[cbMultiByte-1] == NULL)
{
cbMultiByte--;
}


if (cbMultiByte > 0)
{
result.assign(pMultiByteStr, cbMultiByte);
}

delete[] pMultiByteStr;

}

return result;
}
----------------------------------------------------------------------------------------------------------------

std::wstring CStringUtils::WStringFromChar(const char* pSource, int cchSource)
{
    std::wstring result;
    if (pSource != NULL)
    {
        if (cchSource == -1)
        {
            cchSource = (int)strlen(pSource) + 1;
        }
        int cchWideChar = ::MultiByteToWideChar(CP_UTF8, 0, pSource, cchSource, NULL, 0);
        if (cchWideChar > 0)
        {
            wchar_t* pWideCharStr = NULL;
            try
            {
                pWideCharStr = new wchar_t[cchWideChar];
                cchWideChar = ::MultiByteToWideChar(CP_UTF8, 0, pSource, cchSource, pWideCharStr, cchWideChar);
                if (cchWideChar > 0 && pWideCharStr[cchWideChar-1] == NULL)
                {
                    cchWideChar--;
                }
                if (cchWideChar > 0)
                {
                    result.assign(pWideCharStr, cchWideChar);
                }
            }
            catch (...)
            {
            }
            delete[] pWideCharStr;
        }
    }
    return result;
}

No comments: