Показать сообщение отдельно
Старый 06.11.2009, 14:33   #4  
ivas is offline
ivas
Участник
Аватар для ivas
 
252 / 68 (3) ++++
Регистрация: 22.12.2005
когдато давно взято с этого форума, возможно поможет
X++:
#define.CP_ACP(0)
#define.CP_UTF8(65001)
static str Utf2Ansi(str Utf8)
{
    DLL             _kernelDLL        = new DLL("KERNEL32");
    DLLFunction     MultiByteToWideChar  = new DLLFunction(_kernelDLL, "MultiByteToWideChar");
    DLLFunction     WideCharToMultiByte  = new DLLFunction(_kernelDLL, "WideCharToMultiByte");
    Binary          buf, buf1;
    int             len;
    str             res;
    res = "";
    if (Utf8)
    {
        buf = new Binary(strlen(Utf8));
        buf.string(0, Utf8);
        buf1 = new Binary((strlen(Utf8) + 1) * 2);
        MultiByteToWideChar.returns(ExtTypes::DWord);
        MultiByteToWideChar.arg(ExtTypes::DWord, ExtTypes::DWord, ExtTypes::Pointer, ExtTypes::DWord,
                                    ExtTypes::Pointer, ExtTypes::DWord);
        if (MultiByteToWideChar.call(#CP_UTF8, 0, buf, strlen(Utf8) + 1, buf1, strlen(Utf8) + 1))
        {
            WideCharToMultiByte.returns(ExtTypes::DWord);
            WideCharToMultiByte.arg(ExtTypes::DWord, ExtTypes::DWord, ExtTypes::Pointer, ExtTypes::DWord,
                                        ExtTypes::Pointer, ExtTypes::DWord, ExtTypes::DWord, ExtTypes::DWord);
            len = WideCharToMultiByte.call(#CP_ACP, 0, buf1, strlen(Utf8) + 1, buf, 0, 0, 0);
            if (len)
            {
                buf = new Binary(len);
                if (WideCharToMultiByte.call(#CP_ACP, 0, buf1, strlen(Utf8) + 1, buf, len, 0, 0))
                {
                    res = buf.string(0);
                }
            }
        }
    }
    return res;
}
__________________
aLL woRk aNd nO JoY MAKes jAck a dULL Boy
За это сообщение автора поблагодарили: Ivan Beshkurov (1).