setClipboardText и текст на русском языке

Letovo

Известный
Автор темы
95
12
Версия MoonLoader
.026-beta
Здравствуйте, пытался сохранить в буфере обмена с помощью функции setClipboardText(text) текст на русском языке, но безуспешно.
Пытался сделать setClipboardText(u8"Привет"), но при нажатии Ctrl + V получал вот такой текст: Привет
Убираю u8 и получаю следующее: Ïðèâåò

Как это исправить? Заранее спасибо
 

Letovo

Известный
Автор темы
95
12
Дай полный код, так будет проще понять.
Самп работает на кодировке windows-1251 и не может принимать текст в кодировке UTF8

Lua:
function main()
    if not isSampfuncsLoaded() or not isSampLoaded() then return end
    while not isSampAvailable() do wait(100) end
        sampRegisterChatCommand('save', save_cmd)
    while true do
    wait(0)
    end
    end
    end
end
function save_cmd()
    setClipboardText(u8"Привет")
end

И если нажать ctrl + v, то оно вставит ПривеÑ
 

Неадекватная сова

Известный
Проверенный
334
294
а у меня серавно не работает, знает кто еще какие-то способы это сделать?
На кофейной гуще узнаем где не работает. На мимгуи

Lua:
local imgui = require 'mimgui'
local ffi = require 'ffi'
local encoding = require 'encoding'
encoding.default = 'CP1251'
u8 = encoding.UTF8

local renderWindow = imgui.new.bool(true)
local input = imgui.new.char[128]("")

imgui.OnInitialize(function()
    imgui.GetIO().IniFilename = nil
end)

local newFrame = imgui.OnFrame(
    function() return renderWindow[0] end,
    function(player)
        local resX, resY = getScreenResolution()
        local sizeX, sizeY = 300, 300
        imgui.SetNextWindowPos(imgui.ImVec2(resX / 2, resY / 2), imgui.Cond.FirstUseEver, imgui.ImVec2(0.5, 0.5))
        imgui.SetNextWindowSize(imgui.ImVec2(sizeX, sizeY), imgui.Cond.FirstUseEver)
        if imgui.Begin('Main Window', renderWindow) then
            imgui.InputTextWithHint('##input', u8'Текст', input, ffi.sizeof(input))
            if imgui.Button(u8'Скопировать') then
                setClipboardText(u8:decode(ffi.string(input)))
            end
            imgui.End()
        end
    end
)

function main()
    while not isSampAvailable() do wait(0) end

    wait(-1)
end
 

vovka8101

Известный
5
0
На кофейной гуще узнаем где не работает. На мимгуи

Lua:
local imgui = require 'mimgui'
local ffi = require 'ffi'
local encoding = require 'encoding'
encoding.default = 'CP1251'
u8 = encoding.UTF8

local renderWindow = imgui.new.bool(true)
local input = imgui.new.char[128]("")

imgui.OnInitialize(function()
    imgui.GetIO().IniFilename = nil
end)

local newFrame = imgui.OnFrame(
    function() return renderWindow[0] end,
    function(player)
        local resX, resY = getScreenResolution()
        local sizeX, sizeY = 300, 300
        imgui.SetNextWindowPos(imgui.ImVec2(resX / 2, resY / 2), imgui.Cond.FirstUseEver, imgui.ImVec2(0.5, 0.5))
        imgui.SetNextWindowSize(imgui.ImVec2(sizeX, sizeY), imgui.Cond.FirstUseEver)
        if imgui.Begin('Main Window', renderWindow) then
            imgui.InputTextWithHint('##input', u8'Текст', input, ffi.sizeof(input))
            if imgui.Button(u8'Скопировать') then
                setClipboardText(u8:decode(ffi.string(input)))
            end
            imgui.End()
        end
    end
)

function main()
    while not isSampAvailable() do wait(0) end

    wait(-1)
end
ну так работает, но реально ли это сделать без input поля? Например у меня чатлог в mimgui, как мне сделать чтобы копирование работало вот тут:

lua:
    if imgui.BeginTabItem(u8("Чатлог")) then
      imgui.Spacing()
      imgui.Spacing()

      if imgui.BeginChild("chatlog", imgui.ImVec2(-1, -1), true) then
        imgui.Columns(2)
        for k, msg in ipairs(chatlog) do
          imgui.Separator()
          imgui.SetColumnWidth(-1, imgui.GetWindowWidth() * 0.9)
          imgui.TextWrapped(u8(msg))
          imgui.Spacing()
          imgui.NextColumn()
          imgui.SetCursorPosX(imgui.GetCursorPosX() + 10)
          if imgui.Button(faicons("copy") .. "##" .. k) then
            setClipboardText(u8(msg))
          end
          imgui.NextColumn()
        end


        imgui.Columns(1)
        imgui.EndChild()
      end

      imgui.EndTabItem()
    end
 

Неадекватная сова

Известный
Проверенный
334
294
ну так работает, но реально ли это сделать без input поля? Например у меня чатлог в mimgui, как мне сделать чтобы копирование работало вот тут:

lua:
    if imgui.BeginTabItem(u8("Чатлог")) then
      imgui.Spacing()
      imgui.Spacing()

      if imgui.BeginChild("chatlog", imgui.ImVec2(-1, -1), true) then
        imgui.Columns(2)
        for k, msg in ipairs(chatlog) do
          imgui.Separator()
          imgui.SetColumnWidth(-1, imgui.GetWindowWidth() * 0.9)
          imgui.TextWrapped(u8(msg))
          imgui.Spacing()
          imgui.NextColumn()
          imgui.SetCursorPosX(imgui.GetCursorPosX() + 10)
          if imgui.Button(faicons("copy") .. "##" .. k) then
            setClipboardText(u8(msg))
          end
          imgui.NextColumn()
        end


        imgui.Columns(1)
        imgui.EndChild()
      end

      imgui.EndTabItem()
    end
Ну и в чем проблема заменить одну переменную на другую?