我的代码如下:
import msvcrt
userKeyPress = [""]
x = 0
whereInList = 0
def writeToList(char):
if " " not in char:
userKeyPress[whereInList] = userKeyPress[whereInList] + char
while x == 0:
userChar = msvcrt.getch()
userChar = userChar.decode("ASCII")
if " " in userChar:
whereInList = whereInList + 1
userKeyPress.extend(" ")
elif " " not in userChar and "q" not in userChar:
writeToList(userChar)
elif "q" in userChar:
print(userKeyPress)
x = 1
它接受用户输入并将其放入列表中,并用空格创建新的列表值。运行后,它可以转换用户按字节字符串格式输入的第一个字母,但所有其他字符都不会像第一个字母那样。
例如,如果我在键盘上输入字母“ a”,然后按“ b”,然后按“ c”,则返回
['a\x00b\x00c\x00']
第一个字母可以,但是第二个字母前面带有\ x00。为什么会这样,我该怎么解决?
答案 0 :(得分:1)
您似乎正在将UTF-16编码的字符转换为ASCII。
UTF-16是Windows中的默认编码,它以两个字节表示所有字符,这意味着ascii集中的所有字符都将包含一个空字节\x00
。
在阅读文档时,我希望msvcrt.getch()
返回ASCII编码的字符,所以这是意外的。
无论如何,如果将decode("ASCII")
替换为decode('utf16')
,则应该获得预期的输出。