gpt4 book ai didi

python - msvcrt.getch() 每次都检测空间

转载 作者:行者123 更新时间:2023-12-03 11:12:46 31 4
gpt4 key购买 nike

我写了一个简单的 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

最佳答案

它不是检测空间。空间是32 ,不是 0 .

发生的情况是您使用的是宽字符终端,但将其读取为字节,因此您看到的是 UTF-16-LE 字节。在 UTF-16-LE 中,一个 a是两个字节,970 .如果你把它们当作两个 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+0000U+00E0后跟一个键码(或者,如果您使用的是较旧的 Python,则可能是损坏的 U+E0xx,键码嵌入字符中)。但除此之外,它会按您预期的方式工作。

关于python - msvcrt.getch() 每次都检测空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50069553/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com