SA:MP Не отображаются русские символы

Qlliman

Участник
Автор темы
62
1
Начал писать скриптик, казалось бы, все сделал как надо. Но почему же русские символы превращаются в вопросики?
Lua:
local imgui = require 'mimgui'
local encoding = require 'encoding'
encoding.default = 'CP1251'
local u8 = encoding.UTF8
local new = imgui.new

local WinState = new.bool()

imgui.OnFrame(function() return WinState[0] end, function(player)
      player.HideCursor = true
    imgui.SetNextWindowPos(imgui.ImVec2(500,500), imgui.Cond.FirstUseEver, imgui.ImVec2(0.5, 0.5))
    imgui.SetNextWindowSize(imgui.ImVec2(245, 270), imgui.Cond.Always)
    imgui.Begin('##Window', WinState, imgui.WindowFlags.NoResize + imgui.WindowFlags.NoMove + imgui.WindowFlags.NoCollapse + imgui.WindowFlags.NoTitleBar)
    imgui.Text("Выбранный игрок:")
    imgui.Separator()
    imgui.End()
end)

function main()
    sampRegisterChatCommand('cmd', function() WinState[0] = not WinState[0] end)
    wait(-1)
end
 
  • Bug
Реакции: bmw m3 f80

bmw m3 f80

Участник
111
13
Начал писать скриптик, казалось бы, все сделал как надо. Но почему же русские символы превращаются в вопросики?
Lua:
local imgui = require 'mimgui'
local encoding = require 'encoding'
encoding.default = 'CP1251'
local u8 = encoding.UTF8
local new = imgui.new

local WinState = new.bool()

imgui.OnFrame(function() return WinState[0] end, function(player)
      player.HideCursor = true
    imgui.SetNextWindowPos(imgui.ImVec2(500,500), imgui.Cond.FirstUseEver, imgui.ImVec2(0.5, 0.5))
    imgui.SetNextWindowSize(imgui.ImVec2(245, 270), imgui.Cond.Always)
    imgui.Begin('##Window', WinState, imgui.WindowFlags.NoResize + imgui.WindowFlags.NoMove + imgui.WindowFlags.NoCollapse + imgui.WindowFlags.NoTitleBar)
    imgui.Text("Выбранный игрок:")
    imgui.Separator()
    imgui.End()
end)

function main()
    sampRegisterChatCommand('cmd', function() WinState[0] = not WinState[0] end)
    wait(-1)
end
1:
local imgui = require 'mimgui'
local encoding = require 'encoding'
encoding.default = 'CP1251'
local u8 = encoding.UTF8
local new = imgui.new

local WinState = new.bool()

imgui.OnFrame(function() return WinState[0] end, function(player)
      player.HideCursor = true
    imgui.SetNextWindowPos(imgui.ImVec2(500,500), imgui.Cond.FirstUseEver, imgui.ImVec2(0.5, 0.5))
    imgui.SetNextWindowSize(imgui.ImVec2(245, 270), imgui.Cond.Always)
    imgui.Begin('##Window', WinState, imgui.WindowFlags.NoResize + imgui.WindowFlags.NoMove + imgui.WindowFlags.NoCollapse + imgui.WindowFlags.NoTitleBar)
    imgui.Text(u8"Выбранный игрок:")
    imgui.Separator()
    imgui.End()
end)

function main()
    sampRegisterChatCommand('cmd', function() WinState[0] = not WinState[0] end)
    wait(-1)
end

+ответ, данный выше. т.е
в начало добавь

local u8 = encoding.UTF8
encoding.default = 'UTF-8'

а в строках с кириллицей делай так

imgui.Text(u8"Выбранный игрок:")


вырезка из темы mimgui - https://www.blast.hk/threads/66959/:
Мы видим здесь каракули и вопросительные знаки, почему это происходит?

Работа с другими языками на примере русского
В MoonLoader 025 были добавлены библиотеки lua-iconv и encoding, они призваны помочь в работе с разными кодировками текста.
Следующий пример показывает, как использовать текст на русском в ImGui:
Скрипт должен быть сохранён в кодировке Windows-1251 (конкретно для данного примера)
Если в вашем скрипте имеется огромный код с использованием ImGui и мало взаимодействия с функциями MoonLoader'a либо SAMPFUNCS'a, то вы при желании можете сохранить ваш скрипт в UTF-8 и вам не придётся проделывать все эти операции.
 
Последнее редактирование:
  • Нравится
Реакции: Qlliman

Hatiko

Известный
Проверенный
1,532
648
Рекомендую всё же полностью изучить тему mimgui - https://www.blast.hk/threads/66959/ (https://www.blast.hk/threads/185382/ тоже расписано хорошо). там четко рассказано по этому поводу, чтобы ты полноценно понял, а не просто получить готовый ответ.
 

Jadddxxx

Потрачен
66
63
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Начал писать скриптик, казалось бы, все сделал как надо. Но почему же русские символы превращаются в вопросики?
Lua:
local imgui = require 'mimgui'
local encoding = require 'encoding'
encoding.default = 'CP1251'
local u8 = encoding.UTF8
local new = imgui.new

local WinState = new.bool()

imgui.OnFrame(function() return WinState[0] end, function(player)
      player.HideCursor = true
    imgui.SetNextWindowPos(imgui.ImVec2(500,500), imgui.Cond.FirstUseEver, imgui.ImVec2(0.5, 0.5))
    imgui.SetNextWindowSize(imgui.ImVec2(245, 270), imgui.Cond.Always)
    imgui.Begin('##Window', WinState, imgui.WindowFlags.NoResize + imgui.WindowFlags.NoMove + imgui.WindowFlags.NoCollapse + imgui.WindowFlags.NoTitleBar)
    imgui.Text("Выбранный игрок:")
    imgui.Separator()
    imgui.End()
end)

function main()
    sampRegisterChatCommand('cmd', function() WinState[0] = not WinState[0] end)
    wait(-1)
end
Привет. Проблема в этом -
Ты пишешь кирилицу u8 , которая не поддерживаеться в сампе.
Простой ответ -
Для того что-бы русские или украинские символы отображались,
Перед началом букв писать u8
Например - imgui.Text("Выбранный игрок:") - НЕ ПРАВИЛЬНО
imgui.Text(u8"Выбранный игрок:") - ПРАВИЛЬНО
Так-же не забудь добавить в начало скрипта вот эти строчки -
local encoding = require 'encoding'
encoding.default = 'CP1251'
local u8 = encoding.UTF8


И самое главное.
Изучи mimgui.