键盘输入为python中的Unicode字符

时间:2017-09-18 04:38:53

标签: python unicode utf-8 keyboard-events

我想检测python代码中的击键。我已经尝试了很多使用不同库的方法,但是它们都无法检测到UTF键盘输入而只能检测到Ascii。例如,如果用户键入这些键,我想检测像(“د”)或(“ۼ”)这样的Unicode字符。这意味着如果我按下Alt + Shift键,它会将我的输入更改为另一种使用Unicode字符的语言,我想检测它们。

重要: 我需要Windows版本。

它必须检测击键,甚至不关注终端。

假设这个简单的例子:

from pynput import keyboard
def on_press(key):
    try:
        print(key.char)
    except AttributeError:
        print(key)

if __name__ == "__main__":
    with keyboard.Listener(on_press=on_press) as listener:
            listener.join()

2 个答案:

答案 0 :(得分:0)

很大程度上取决于操作系统和键盘输入方法,但这适用于我的Ubuntu系统;我测试了一些西班牙语字符。

import sys
import tty
import termios

def getch():
    fd = sys.stdin.fileno()
    old_settings = termios.tcgetattr(fd)
    try:
        tty.setraw(fd)
        ch = sys.stdin.read(1)
    finally:
        termios.tcsetattr(fd, termios.TCSADRAIN, old_settings)
    return ch

x = getch()
print("You typed: ", x, " which is Unicode ", ord(x))

以下是英语与西班牙语相同的击键:

$ python3 unicode-keystroke.py
You typed:  :  which is Unicode  58

$ python3 unicode-keystroke.py
You typed:  Ñ  which is Unicode  209

getch函数来自ActiveState

答案 1 :(得分:0)

这是返回Unicode数量的代码。它无法检测当前语言并始终显示旧语言,但仅在cmd窗口中显示,如果您专注于任何其他窗口,则它会完美地显示当前的Unicode编号。

from pynput import keyboard

def on_press(key):
    if key == keyboard.Key.esc:
        listener.stop()
    else:
        print(ord(getattr(key, 'char', '0')))

controller = keyboard.Controller()
with keyboard.Listener(
        on_press=on_press) as listener:
    listener.join()