1 (изменено: Alex112, 2010-12-06 19:15:35)

Тема: AHK: Корректная передача Юникода из переменной при создания файла

Получается когда создаю файл из переменной с русским текстом, получаются каракули, когда помещаю в клипборд то нормально отображает. Как сделать чтоб корректно работало?(то есть создать файл без каракуль:))

2 (изменено: teadrinker, 2010-12-06 20:30:08)

Re: AHK: Корректная передача Юникода из переменной при создания файла

В какой конкретно кодировке текст? Если в Utf-8, поможет такая функция:

Utf8ToAnsi(Utf8String, CodePage = 1251)
{
    If (NumGet(Utf8String) & 0xFFFFFF) = 0xBFBBEF
        BOM = 3
    Else
        BOM = 0

    UniSize := DllCall("MultiByteToWideChar", "UInt", 65001, "UInt", 0
                                            , "UInt", &Utf8String + BOM, "Int", -1
                                            , "Int", 0, "Int", 0)
    VarSetCapacity(UniBuf, UniSize * 2)
    DllCall("MultiByteToWideChar", "UInt", 65001, "UInt", 0
                                 , "UInt", &Utf8String + BOM, "Int", -1
                                 , "UInt", &UniBuf, "Int", UniSize)

    AnsiSize := DllCall("WideCharToMultiByte", "UInt", CodePage, "UInt", 0
                                             , "UInt", &UniBuf, "Int", -1
                                             , "Int", 0, "Int", 0
                                             , "Int", 0, "Int", 0)
    VarSetCapacity(AnsiString, AnsiSize)
    DllCall("WideCharToMultiByte", "UInt", CodePage, "UInt", 0
                                 , "UInt", &UniBuf, "Int", -1
                                 , "Str", AnsiString, "Int", AnsiSize
                                 , "Int", 0, "Int", 0)
    Return AnsiString
}
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder