为什么只有一个字符正确更改?

时间:2018-10-07 13:22:25

标签: python windows python-3.x

我的代码如下:

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。为什么会这样,我该怎么解决?

1 个答案:

答案 0 :(得分:1)

您似乎正在将UTF-16编码的字符转换为ASCII。 UTF-16是Windows中的默认编码,它以两个字节表示所有字符,这意味着ascii集中的所有字符都将包含一个空字节\x00

在阅读文档时,我希望msvcrt.getch()返回ASCII编码的字符,所以这是意外的。

无论如何,如果将decode("ASCII")替换为decode('utf16'),则应该获得预期的输出。