在Linux Mint 19.3中使用Autokey 95.8和Python 3版本,我有一系列的键盘宏可以生成Unicode字符。此示例有效:
# alt+shift+a = á
import sys
char = "\u00E1"
keyboard.send_keys(char)
sys.exit()
但是尝试打印短划线[—]会产生以下错误:
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中的这个问题。
答案 0 :(得分:1)
您在上面发布的代码不会产生您收到的错误-如果您尝试放入Python源代码"truncated \UXXXXXXXX"
,\U
需要大写的char = "\U2014"
和8个十六进制数字,您将收到该错误消息(可能是通过这种方式对文件进行实验时得到的)。
序列char = "\u2014"
将在Python端创建一个mdash Unicode字符-但这并不意味着可以通过自动键将其作为键盘sybo发送到Windows。这就是您的程序可能失败的原因(并且由于没有编程错误,因此您不会收到Python错误消息-只是它无法正常工作-尽管Autokey可能不错并且可以打印出一些适当的错误消息在这种情况下)。
您必须四处寻找如何在S.O上键入任意Unicode字符的方法。配置(在Linux Mint上,它应该在“ wayland”的文档中),然后将字符composign序列发送给Autokey。如果没有这样的序列,则找到一种方法来将所需的字符复制到窗口环境剪贴板,然后向Autokey发送“粘贴”序列(通常为ctrl + v
-但取决于应用程序,它可能会更改。模拟器使用ctrl + shift + v
,例如)
答案 1 :(得分:0)
当您需要在自动键中发出非英语的美国字符时,有两种选择。最简单的方法是使用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()
的基础代码想要发送键盘上实际存在的键码,或者可以将其添加到布局中未使用的键上。多数情况下,对于任何多字节而言,这都不起作用。