|
|
|
utf8 и clipboard |
|
|
DarkMaster |
25.11.2022, 7:56
|
Модератор UOPilot
Сообщений: 9.465
Регистрация: 2.12.2008 Группа: Супермодераторы Наличность: 27680
Пользователь №: 11.279
|
Собственно нужно подгружать в буфер текст в utf8 с корявыми символами, затем как-то это вставить/напечатать. Нативные варианты проходить не захотели. Даже не очень понимаю куда при этом копать. То ли в луа пытаться юникод подключить, но какакая разница что там либы преобразуют, если я считваю файл в бинарном режиме("rb" флаги)? По идее там уже корректный юникод даже если луа или пилот о нем вообще ничего не знают. Кривой сам клибоард пилотовский? Открыл маны мсдн сделать биндинг, прихренел, прикрыл. Идеи? Реализации? send/send217/say/sendex естественно не работают ибо пилот utf никогда и не знал. Что-то мне подсказывает, что в клипбоарде аналогичные проблемы.
Сообщение отредактировал DarkMaster - 25.11.2022, 8:11
--------------------
Скрипты UOPilot под заказ. Консультации по UOpilot 15$/час. Услуги Lua разработчика (не пилот, проекты, постоянка) Disсоrd: Kov____
|
|
|
|
Cockney |
25.11.2022, 15:52
|
Master
Сообщений: 1.395
Регистрация: 22.6.2013 Группа: Пользователи Наличность: 21046
Пользователь №: 16.156
|
Цитата(DarkMaster @ 25.11.2022, 14:57) Есть файл со спецсимволами и дурной локалью. Он в utf-8. Могу конвертнуть в utf16 le, если есть необходимость. Задача выдернуть из файла текс и вставить его в приложение. Приложение точно держит кодировки. Ну и вставка через ctrl+v идет так, что обработчики там уже виндовые. Вопрос в том, что в буфер не получается корректно поместить данные из файла, чтобы их потом вставить. На данный момент прилетают корректно только стандартные символы, остально крякозябрит.
если приложение древнее как и пилот, то 1) Конвертишь файл в utf-16 (MultiByteToWideChar) 2) Конвертишь из utf-16 в нужную локаль (WideCharToMultiByte, указывая кодовую страницу) 3) Копируешь в буфер обмена 4) Вставляешь если приложение новое 1) Конвертишь в utf-16 2) Копируешь в буффер и вставляешь Не совсем понятно что имеется в виду "приложение держит кодировки". Там либо полный юникод и как правило можно утф8 из коробки юзать, либо там ascii таблица и не все кодировки поддерживаются. Собственно, если в файле у тебя арабская вязь, то ты в любом случае не сможешь конвертнуть для показа в окошке ру-версии винды. Нужно ставить языковые пакеты или типа того, не помню точно.
|
|
|
|
Cockney |
25.11.2022, 17:12
|
Master
Сообщений: 1.395
Регистрация: 22.6.2013 Группа: Пользователи Наличность: 21046
Пользователь №: 16.156
|
Пилот использует ascii версии апи, для этого и нужна конвертация. По факту тебе бы просто самому вызвать SetClipboardTextW() и все. А вставку норм сам хромиум отработает, т.к. он полностью юникодный. Но это лишь рассуждения, сам я так не делал ни разу. Вот ее вызвать https://learn.microsoft.com/en-us/windows/w...etclipboarddataТеперь план такой: 1) читаешь файл 2) конвертишь в утф16 (почитай в доках умеет ли оно в утф8, тогда не надо) 3) вызываешь апи 4) эмулируешь вставку в хром
|
|
|
|
DarkMaster |
1.12.2022, 17:37
|
Модератор UOPilot
Сообщений: 9.465
Регистрация: 2.12.2008 Группа: Супермодераторы Наличность: 27680
Пользователь №: 11.279
|
В доках вроде utf16 вообще нет. Решение собственно такое. Дергаем: winapi https://luapower.com/winapi/downloadglue https://luapower.com/glueevents https://luapower.com/events (не уверен, что нужен под буфер, но в целом для кусков winapi он бывает нужен) дабы не морочить голову у меня glue и events лежат прямо в папке winapi. Если хотите подгружать отдельно - правьте пути. Само winapi лежит в папке lua_plugins рядом с exe пилота. Код do local back = package.path package.path = "lua_plugins\\winapi\\?.lua;"..package.path setfenv(1, require'winapi') require[[winapi.clipboard]] package.path = back end
OpenClipboard() EmptyClipboard() SetClipboardText("ВАШ ТЕКСТ") CloseClipboard()
типа работает
--------------------
Скрипты UOPilot под заказ. Консультации по UOpilot 15$/час. Услуги Lua разработчика (не пилот, проекты, постоянка) Disсоrd: Kov____
|
|
|
|
FREEON |
8.2.2023, 5:22
|
Journeyman
Сообщений: 365
Регистрация: 14.2.2017 Группа: Пользователи Наличность: 1317
Пользователь №: 18.346
Возраст: 25
|
Смотря на сколько сложная задача. Можно было бы это реализовать с помощью различных ALT-кодов sendex @{num_1} Пилот не может набрать несколько цифр(нумпад). Но это не проблема, можно обойтись и обычными шорт кодами 1 2 которые браузеры или приложения конвертируют в символ(emoji) при получении сообщения. И в каждом отдельном ресурсе(вк, вайбер, андроид, айфон и т.п. сайт) могут быть свои кодировки, где-то поддерживаться где-то нет. Другое дело уже сгенерировать эти коды нужно создавать таблицу или же использовать конвертеры онлайн(по типу 1 или 2) или программы(консоли). Через буфер прогнать проблемы не должны возникать, а вот уже с обработкой или простым изменением уже нужно изменять(перегонять) кодировку. :pensive:
|
|
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|