首先你要判断杜入的文本是否是 UNICODE,可以用下面的方法:DWORD GuessIsTextUnicode(LPBYTE lpBuffer, int cbSize)
{
WORD w;
int nNumZero; w = GetUnicodeLeadWord(lpBuffer);
if(w == 0xfeff) //probably Unicode
{
nNumZero = GuessHelper(lpBuffer, cbSize, 3);
if(nNumZero >= MAX_GUESSBYTES / 3 || nNumZero >= cbSize / 3)
return GUESS_UNICODE | GUESS_UNICODE_HAS_LEADWORD;
}
else if(w == 0xfffe) //probably Unicode big endian
{
nNumZero = GuessHelper(lpBuffer, cbSize, 2);
if(nNumZero >= MAX_GUESSBYTES / 3 || nNumZero >= cbSize / 3)
return GUESS_UNICODE_BIG_ENDIAN | GUESS_UNICODE_HAS_LEADWORD;
}
nNumZero = GuessHelper(lpBuffer, cbSize, 1);
if(nNumZero >= MAX_GUESSBYTES / 3 || nNumZero >= cbSize / 3)
return GUESS_UNICODE; //probably Unicode
nNumZero = GuessHelper(lpBuffer, cbSize, 0);
if(nNumZero >= MAX_GUESSBYTES / 3 || nNumZero >= cbSize / 3)
return GUESS_UNICODE_BIG_ENDIAN; //probably Unicode big endian return GUESS_MBCS;
}int GuessHelper(LPBYTE lpBuffer, int cbSize, int iStart)
{
int nNumZero;
int i; nNumZero = 0;
for(i = iStart; i < MAX_GUESSBYTES && i < cbSize; i += 2)
{
if(lpBuffer[i] == 0)
nNumZero++;
}
return nNumZero;
}例子:
void Test()
{
dwType = GuessIsTextUnicode(lpBuffer, cbSize);
if((dwType & GUESS_UNICODE) || (dwType & GUESS_UNICODE_BIG_ENDIAN))
{
int cch;

cch = cbSize / 2;
lpwstr = new wchar_t[cch + 1];
if(lpwstr == NULL)
return E_FAIL;
memcpy(lpwstr, lpBuffer, cbSize);
lpwstr[cch] = 0;
if(dwType && GUESS_UNICODE_HAS_LEADWORD)
bstrXML = ::SysAllocString(&lpwstr[1]);
else
bstrXML = ::SysAllocString(lpwstr);
delete[] lpwstr;
}
else
{
lpwstr = new wchar_t[cbSize + 1];
if(lpwstr == NULL)
return E_FAIL;
rc = MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, (LPCSTR)lpBuffer, cbSize, lpwstr, cbSize + 1);
if(rc == 0)
{
delete[] lpwstr;
return E_FAIL;
}
lpwstr[cbSize] = 0;
bstrXML = lpwstr;
delete[] lpwstr;
}
}