【问题标题】:Why strings with diacritics doesn't work properly? Any solution?为什么带有变音符号的字符串不能正常工作?有什么解决办法吗?
【发布时间】:2019-02-26 01:47:08
【问题描述】:

我不太了解脚本。在罗技游戏软件中,我想使用这个 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

当我按下 RMB 时它应该增加我的鼠标 DPI,当我释放 RMB 时它应该减小它,但括号中的值(PlayMacro 之后)应该是我使用的语言(波兰语)。
在波兰语中,您写“DPI w górę”而不是“DPI Up”和“DPI w dół”而不是“DPI Down”,但是脚本不起作用。
我很确定这都是关于变音符号的,因为例如“Back”宏可以正常工作 - 在波兰语中你写“Wstecz”

我该怎么做才能使脚本正常工作?

【问题讨论】:

  • 这可能与配置文件中使用的文本编码以及如何处理来自 Lua 脚本的文本有关。 Lua 本身与字符集无关,因此 LGS 可能会将脚本中的字符串视为 ascii 或 utf-8。任何问题都可能是这种虐待的结果,但我找不到有关 LGS 中使用的字符集/编码的任何信息。
  • 尝试 UTF8 编码:"DPI w g\195\179r\196\153" 代替 "DPI w górę""DPI w d\195\179\197\130" 代替 "DPI w dół"
  • 有效!在创建此线程之前,我在想也许我可以输入字符代码而不仅仅是字符,但我不知道在哪个标准(Unicode 等)以及如何分隔它们,现在一切都清楚了。谢谢你们!问题已解决。

标签: lua logitech-gaming-software


【解决方案1】:
local UTF8_letters = {["ó"] = "\195\179", ["ę"] = "\196\153", ["ł"] = "\197\130"}

local function UTF8(str)
   return (str:gsub(".", UTF8_letters))
end

function OnEvent(event, family)
    if (event == "MOUSE_BUTTON_PRESSED" and arg == 2) then  
        PlayMacro(UTF8"DPI w górę")
    elseif (event == "MOUSE_BUTTON_RELEASED" and arg == 2) then
        PlayMacro(UTF8"DPI w dół")
    end
end

【讨论】:

  • 这个不行。我不知道为什么。无论如何,您的第一个答案(“尝试 UTF8 编码 [...]”)解决了我的问题,再次感谢您! :)
  • 记住.是一个单一的ascii字符,所以如果'ó'是一个多字节序列,.不会匹配它(但是会匹配它的字节)分开)。
  • @DarkWiiPlayer - 据我了解,问题是在以 1 字节 Windows 编码编写的 Lua 脚本中使用 UTF-8 字符串。
  • @EgorSkriptunoff 你是对的,除了我们不知道编码。 OP 从来没有告诉我们(并且可能不知道)代码编辑器使用什么奇怪的编码来编码这些字符,并且就我们所知,它是一些特定于 Windows 的多字节公牛****,所以我们不能做出任何假设。
  • @DarkWiiPlayer - 波兰语 Windows 只有 2 种编码:单字节 (windows-1250) 和双字节 (UTF-16LE)。很明显不能是UTF-16(因为Lua无法正确编译UTF-16编码的脚本)。因此,OP 适用于 windows-1250。
猜你喜欢
  • 1970-01-01
  • 2021-10-15
  • 2021-05-10
  • 2023-04-09
  • 1970-01-01
  • 1970-01-01
  • 2012-01-27
  • 2015-05-31
  • 2021-10-07
相关资源
最近更新 更多