我写了一个简单的python代码,它应该检测我的击键,但由于某种原因,每次击键后都会检测到空间。
守则:
import msvcrt
print("press 'escape' to quit...")
text=""
while 1:
char = msvcrt.getch()
print(ord(char))样本运行:
Input: aaaaa
Output:
97
0
97
0
97
0
97
0
97
0发布于 2018-04-27 20:09:45
这不是探测空间。空间是32,而不是0。
正在发生的事情是,你使用的是一个宽字符终端,但是把它读成字节,所以你看到的是UTF-16-LE字节。在UTF-16-LE中,a是两个字节,97和0.如果你把它们当作是两个ASCII字符,而不是一个UTF-16-LE字符,你就会得到a和\0。
注意,返回的不是'a\0a\0a\0',而是b'a\0a\0a\0'。因此,您可以将它们缓冲到bytes或bytearray中,并在其上使用decode('utf-16-le')。但这违背了一次只读一个字符的目的。
最简单的解决方法是使用getwch而不是getch。这通常只是做您想做的事情-返回一个单字符的str值,比如'a',而不是两个单独的单字节bytes值。
星体字符(U+FFFF上的所有内容)显示为两个独立的代名词而不是一个字符,可能仍然会出现一些问题,“特殊键”仍将显示为Unicode U+0000或U+00E0,后面跟着密钥代码(或者,如果您有一个较旧的Python,则可能是嵌入在字符中的键代码已损坏的U+E0xx )。但否则,它会像你所期望的那样运作。
https://stackoverflow.com/questions/50069553
复制相似问题