Почему строки с диакритическими знаками не работают должным образом? Любое решение?

Я не очень разбираюсь в сценариях. В Logitech Gaming Software я хотел использовать этот сценарий LUA:

function OnEvent(event, family)
    if (event == "MOUSE_BUTTON_PRESSED" and arg == 2) then  
        PlayMacro("DPI Up")
    elseif (event == "MOUSE_BUTTON_RELEASED" and arg == 2) then
        PlayMacro("DPI Down")
    end
end

Он должен увеличивать разрешение моей мыши, когда я нажимаю ПКМ, и уменьшать его, когда я отпускаю ПКМ, но значение в скобках (после PlayMacro) должно быть на языке, который я использую (польском).
На польском языке вы пишете «DPI w górę "вместо" DPI Up "и" DPI w dół "вместо" DPI Down ", но тогда скрипт не работает.
Я почти уверен, что все дело в диакритических знаках, потому что, например, макрос" Back "отлично работает - по-польски вы пишете «Wstecz» ‹- слово без диакритических знаков, я также проверил такие слова, как« Zmiana DPI », и все они работают правильно (потому что они без диакритических знаков, я думаю).

Что я могу сделать, чтобы скрипт работал правильно?


person irastio    schedule 21.09.2018    source источник
comment
Это может быть связано с кодировкой текста, используемой в профиле, и с тем, как обрабатываются тексты из сценариев Lua. Lua сам по себе не зависит от кодировки, поэтому LGS может обрабатывать строки из скриптов либо как acscii, либо как utf-8. Любые проблемы могут быть результатом этого жестокого обращения, но я не смог найти никакой информации о кодировках / кодировках, используемых в LGS.   -  person Vlad    schedule 21.09.2018
comment
Попробуйте кодировку UTF8: "DPI w g\195\179r\196\153" вместо "DPI w górę" и "DPI w d\195\179\197\130" вместо "DPI w dół"   -  person Egor Skriptunoff    schedule 21.09.2018
comment
Оно работает! Перед созданием этой темы я думал, что, может быть, я могу набирать коды символов, а не просто символы, но я не знал, в каком стандарте (Unicode и т. Д.) И как их разделить, теперь все ясно. Спасибо вам всем! Проблема решена.   -  person irastio    schedule 21.09.2018


Ответы (1)


person    schedule
comment
Это не работает. Не знаю почему. В любом случае, ваш первый ответ (попробуйте кодировку UTF8 [...]) решил мою проблему, так что еще раз спасибо! :) - person irastio; 23.09.2018
comment
помните, что . - это одиночный символ ascii, поэтому, если 'ó' является многобайтовой последовательностью, . не будет соответствовать ей (но будет сопоставлять ее байты отдельно). - person DarkWiiPlayer; 24.09.2018
comment
@DarkWiiPlayer - насколько я понял, проблема заключается в использовании строк UTF-8 в скрипте Lua, написанном в 1-байтовой кодировке Windows. - person Egor Skriptunoff; 24.09.2018
comment
@EgorSkriptunoff вы в основном правы, вот только кодировку мы не знаем. OP никогда не сообщает нам (и, вероятно, не знает), какую кодировку werid использует редактор кода для кодирования этих символов, и, насколько нам известно, это какой-то специфичный для Windows многобайтовый булл ****, поэтому мы не можем делать никаких предположений. - person DarkWiiPlayer; 24.09.2018
comment
@DarkWiiPlayer - Польская Windows имеет только 2 кодировки: однобайтную (windows-1250) и двухбайтовую (UTF-16LE). Очевидно, что это не может быть UTF-16 (потому что Lua не может правильно скомпилировать скрипт в кодировке UTF-16). Следовательно, OP работает с windows-1250. - person Egor Skriptunoff; 24.09.2018