int AsciiToUtf8(char* pSrc, unsigned int nSrcLen, char* pBuffer, unsigned int nBufferLen)
{
assert(pSrc != NULL);
int nRet(0);
int nUtf16Len = MultiByteToWideChar(CP_ACP, 0, pSrc, nSrcLen, NULL, 0);
if(nUtf16Len > 0)
{
wchar_t* pW = new wchar_t[nUtf16Len];
if(pW != NULL)
{
nUtf16Len = MultiByteToWideChar(CP_ACP, 0, pSrc, nSrcLen, pW, nUtf16Len);
if(pBuffer == NULL || nBufferLen <= 0)
{
nRet = WideCharToMultiByte(CP_UTF8, 0, pW, nUtf16Len, NULL, 0, NULL, NULL);
}
else
{
nRet = WideCharToMultiByte(CP_UTF8, 0, pW, nUtf16Len, pBuffer, nBufferLen, NULL, NULL);
}
delete []pW;
pW = NULL;
}
}
return nRet;
}