【问题标题】:How to type UTF-8 Emojis with the pynput.keyboard module如何使用 pynput.keyboard 模块输入 UTF-8 表情符号
【发布时间】:2020-10-23 00:39:29
【问题描述】:

我正在尝试使用键盘输入 UTF-8 表情符号,但我总是收到以下异常。 Pynput 似乎可以正确转换 UTF-8 符号,但无法输入。

Traceback (most recent call last):
  File "pasteEmoji.py", line 11, in <module>
    keyboard.type('\U0001f61a')
  File "/usr/local/lib/python3.7/dist-packages/pynput/keyboard/_base.py", line 468, in type
    raise self.InvalidCharacterException(i, character)
pynput.keyboard._base.InvalidCharacterException: (0, '????')

from pynput.keyboard import Key, Controller
import time

keyboard = Controller()

print("2 Seconds left...")
time.sleep(2)

keyboard.type('\U0001f61a')

有人知道如何输入 UTF-8 符号吗? 提前致谢!

【问题讨论】:

  • 显然,pynput 认为 ????是一个不可键入的字符(至少在您的平台上)。也许这个库不是创建用于输入表情符号的键盘快捷键的正确工具......

标签: python utf-8 keyboard emoji pynput


【解决方案1】:

不是您正在寻找的解决方案,也许只是部分解决方案。但我发现 xdotool 会发送这些字符。 Firefox(以及可能的其他浏览器)似乎禁用了该功能。

你可以这样实现:

import subprocess
subprocess.run(["xdotool", "type", "\U0001F61A"])

还有一个实现 xdotool 的 python 库,名为libxdo。但是它已经多年没有更新了,我还没有测试它。

如果我找到更好的解决方案,我会更新这个。

编辑:我发现了一个非常实用的解决方案,似乎非常快,并且可以在 Firefox 中使用。它需要启用 CTRL+SHIFT+U unicode HEX 快捷方式。可以通过按下这些按钮进行测试,如果 u 带有下划线,则很好。

from evdev import UInput, ecodes as e

ui = UInput()

string = "1F61A" #The unicode hexcode. Make sure it's in uppercase
ui.write(e.EV_KEY, e.KEY_LEFTCTRL, 1)       
ui.write(e.EV_KEY, e.KEY_LEFTSHIFT, 1)      
ui.write(e.EV_KEY, e.KEY_U, 1)      
ui.write(e.EV_KEY, e.KEY_U, 0)
ui.write(e.EV_KEY, e.KEY_LEFTSHIFT, 0)  
ui.write(e.EV_KEY, e.KEY_LEFTCTRL, 0)
for s in string:
    exec("ui.write(e.EV_KEY, e.KEY_{}, 1)".format(s))
    exec("ui.write(e.EV_KEY, e.KEY_{}, 0)".format(s))
ui.write(e.EV_KEY, e.KEY_ENTER, 1)  
ui.write(e.EV_KEY, e.KEY_ENTER, 0)  
ui.syn()

不漂亮,但对我来说效果很好。

EDIT2:最后一次编辑。我在 pynput 的 github here 上复活了一个老问题。并且创建了一个对我有用的修复程序,应该很快就会推送到主分支!

【讨论】:

    猜你喜欢
    • 2014-08-06
    • 2019-03-21
    • 2016-03-28
    • 1970-01-01
    • 2011-12-10
    • 2020-09-19
    • 2016-06-10
    • 2020-12-09
    相关资源
    最近更新 更多