0

在 Linux Mint 19.3 中使用 Autokey 95.8,Python 3 版本,我有一系列生成 Unicode 字符的键盘宏。这个例子有效:

# alt+shift+a = á

import sys

char = "\u00E1"
keyboard.send_keys(char)

sys.exit()

但是尝试打印 mdash [—] 会产生以下错误:

SyntaxError:(unicode error) 'unicodeescape' codec' can't decode bytes in position 0-5: truncated \UXXXXXXXX escape

# alt+shift+- = —

import sys

char = "\u2014"
keyboard.send_keys(char)

sys.exit()

非常感谢任何如何在 Autokey 中克服这个问题的想法。

4

2 回答 2

1

您在上面发布的代码不会产生您遇到的错误 -"truncated \UXXXXXXXX"需要一个大写字母\U- 和 8 个十六进制数字 - 如果您尝试输入 Python 源代码char = "\U2014",您将收到该错误消息(可能是您在尝试使用以这种方式归档)。

该序列char = "\u2014"将在 Python 端创建一个 mdash unicode 字符 - 但这并不意味着可以通过自动键将其作为键盘 sybo 发送到 Windows。这就是您的程序可能失败的地方(并且由于没有编程错误,您不会收到 Python 错误消息 - 只是它不起作用 - 尽管 Autokey 可能很好并打印出一些适当的错误消息在这种情况下)。

您必须查看如何在您的 SO 配置中键入任意 unicode 字符(在 Linux mint 上,我猜它应该在“wayland”的文档中),然后将字符组合序列发送到 Autokey。如果没有这样的序列,则找到一种将所需字符复制到窗口环境剪贴板的方法,然后向 Autokey 发送“粘贴”序列(通常ctrl + v- 但取决于应用程序,它可能会更改。终端仿真器使用ctrl + shift + v,例如)

于 2020-01-27T13:33:38.900 回答
0

当您需要在 AutoKey 中发出非英语美国字符时,您有两种选择。最简单的方法是使用 将它们放入剪贴板,clipboard.fill_clipboard(your characters)然后使用 将它们粘贴到窗口中keyboard.send_keys("<ctrl>+v")。这几乎总是有效的。

如果您需要定义一个包含多字节字符的短语,请选择该Paste using Clipboard (Ctrl+V)选项。(我试图让它成为未来版本中的默认选项。)

我仍然不太确定的另一个选择是直接将 Unicode 转义序列发送到窗口,让它将其转换为实际的 Unicode 字符。类似的东西keyboard.send_keys("\U2014")。如问题所示,首先将其分配给变量会创建该 API 调用无法正确处理的实际 Unicode 字符。

问题在于底层代码keyboard.send_keys()想要发送实际存在于键盘上的键码,或者它可以添加到布局中未使用的键中。大多数情况下,这不适用于任何多字节。

于 2020-10-11T21:15:52.887 回答