SyntaxError:(unicode错误)'UnicodeScape'codec'无法解码位置0-5中的字节:截断\UXXXXXXXX转义

SyntaxError:(unicode错误)'UnicodeScape'codec'无法解码位置0-5中的字节:截断\UXXXXXXXX转义,unicode,python-3.6,autokey,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() 但尝试打印mdash[-]会产生以下错误: SyntaxError:(unicode error) 'unicodeescape' codec' can't decode bytes i

使用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中解决此问题的任何想法。

您在上面发布的代码不会产生错误-被截断\uxxxxx需要大写\U-和8个十六进制数字-如果您尝试输入Python源字符=\U2014,您将得到该错误消息,并且可能是在以这种方式尝试该文件时得到的

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


您必须了解如何在LinuxMint上的S.O.config上键入任意unicode字符,我想它应该在wayland的文档中,然后将字符组合序列发送到Autokey。如果没有这样的序列,则找到将所需字符复制到Windows环境剪贴板的方法,然后发送粘贴序列的自动键(通常为ctrl+v),但根据应用程序的不同,粘贴序列可能会发生变化。终端仿真器使用ctrl+shift+v,例如

当您需要在AutoKey中发出非英语的美国字符时,您有两种选择。最简单的方法是用剪贴板将它们放入剪贴板。填写剪贴板并使用键盘将字符粘贴到窗口中。发送键盘+v。这几乎总是有效的

如果需要定义包含多字节字符的短语,请选择“使用剪贴板粘贴”Ctrl+V选项。我正试图让它成为未来版本中的默认选项

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


问题在于,keyboard.send_键的基础代码希望发送键盘上实际存在的键代码,或者可以添加到布局中未使用的键。大多数情况下,这对任何多字节都不起作用。

您尝试过\u0000214吗?不知道为什么它会工作,因为这是使用较少的UTF-32表示,但值得一试。我猜:没有生成mdash的键。我在看消息来源。如果我发现一些明确的问题,我会发布一个答案。谢谢大家\U000014不执行任何操作,\U000014生成与上述相同的错误。还注意到\u2014是UTF-16。\u2014不是UTF-16,它是EM DASH的Unicode代码点。要成为UTF-16,您需要,例如,“\u2014”。编码为“UTF-16le”。马克·托洛宁,这是代码点,您是正确的,但这两种变体都不起作用。什么是UTF-8代码?检查文档中的Autokey看起来像是提供了您需要的cliboard功能-但是Autokey的设置似乎有问题,我无法让它运行。多亏了大家\U000014不执行任何操作,\U000014生成与上述相同的错误。还注意到\u2014是UTF-16。目前,我必须模拟Unicode键盘击键来生成它,这不是一种优雅的方法。我还担心结扎线的意外问题,etc.alt+shift+-insert mdash被空格import sys char=2014 csu=++u ret=spc=keyboard.send_keyspc+csu+char+ret+spc sys.exit包围请注意\u2014不是UTF-16-在Python代码中是一个Unicode字符-它确实适合UTF-16中的所有其他Unicode字符,但这实际上与问题无关。如果建议有效,请考虑将答案标记为正确。否则的工作示例是第一个。u00E1和各种其他重音字符由自动键生成。但是有一系列代码点不起作用,我不明白为什么。所有这些字符都在扩展的ANSI表格中,介于128到256之间。ANSI代码151是mdash,所有这些都是Unicode表中数字顺序的一部分。区别在于,有些代码确实表示可能有键直接关联的字符,而不依赖于像ç或ñ这样的合成。无论当前的键盘布局如何,这些字符中的任何一个都有可能被直接识别。