Приветствую, уважаемые!
Сломал мозг, поскольку нижеприведенный код на одной машине (к сожалению, пощупать ее возможности нет) выдает вопросики вместо нормально перекодированного текста.
Убил у английской WinXP везде где можно русский язык, оставил только страницу 1251 в доступных страницах кодировок — работает нормально.
В чем может быть проблема?
CAtlString UTF8Decode(CAtlString& from)
{
CAtlString result;
UINT cp = CP_UTF8;
int wbuflen = MultiByteToWideChar(cp, MB_ERR_INVALID_CHARS, from.GetBuffer(), -1, NULL, 0);
if(wbuflen == 0 && ERROR_NO_UNICODE_TRANSLATION == GetLastError())
{
// no UTF-8 string
cp = 1251;
wbuflen = MultiByteToWideChar(cp, MB_ERR_INVALID_CHARS, from.GetBuffer(), -1, NULL, 0);
}
WCHAR * wbuf = new WCHAR[wbuflen];
int buflen = MultiByteToWideChar(cp,0,from.GetBuffer(),-1,wbuf,wbuflen);
if(buflen == wbuflen)
{
buflen = WideCharToMultiByte(1251, 0, wbuf, -1, NULL, 0,NULL,NULL);
TCHAR* buf = new TCHAR[buflen];
WideCharToMultiByte(1251, 0, wbuf, -1, buf, buflen,NULL,NULL);
result = buf;
delete [] buf;
} // if(buflen == wbuflen)
delete [] wbuf;
return result;
}
В общем, голова уже пухнет немного, т.к. не знаю, что и предположить. Может, проглядел чего?
З.Ы. Код вызывается из BHO в контексте IE, если это важно.
<< Существует и лучший мир, но там все очень дорого. >>