语法错误:(unicode错误)“ unicodeescape”编解码器无法解码位置0-5中的字节:截断的\ UXXXXXXXX转义

时间:2020-01-26 21:25:14

标签: unicode python-3.6 autokey

在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中的这个问题。

2 个答案:

答案 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()的基础代码想要发送键盘上实际存在的键码,或者可以将其添加到布局中未使用的键上。多数情况下,对于任何多字节而言,这都不起作用。