Перекодировка UTF8 => 1251
От: Flamer Кипр http://users.livejournal.com/_flamer_/
Дата: 16.01.08 10:05
Оценка:
Приветствую, уважаемые!

Сломал мозг, поскольку нижеприведенный код на одной машине (к сожалению, пощупать ее возможности нет) выдает вопросики вместо нормально перекодированного текста.

Убил у английской 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, если это важно.
<< Существует и лучший мир, но там все очень дорого. >>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.