Python msvcrt.getch()方法中的\xe0是什么?

Python msvcrt.getch()方法中的\xe0是什么?,python,character-encoding,Python,Character Encoding,在msvcrt.getch()方法中,当我输入任何不在ascii表中的值时,我总是得到“\xe0”。我不知道这是什么意思 >>>import msvcrt >>>up_arrow = msvcrt.getch() >>> # this is where I have inputed the up arrow >>>print up_arrow '\xe0' >>>down_arrow = msvcrt.ge

在msvcrt.getch()方法中,当我输入任何不在ascii表中的值时,我总是得到“\xe0”。我不知道这是什么意思

>>>import msvcrt
>>>up_arrow = msvcrt.getch()
>>> # this is where I have inputed the up arrow
>>>print up_arrow
'\xe0'
>>>down_arrow = msvcrt.getch()
>>>
>>>print down_arrow
'\xe0'
下文对此进行了解释:

如果按下的键是特殊功能键,则返回“\000”或“\xe0”;下一个调用将返回keycode

从封面下可以看出,Python只是调用MSVCRT函数,这有点像POSIX函数,但在一个关键方面有所不同:

读取功能键或箭头键时,每个功能必须调用两次;第一个调用返回0或0xE0,第二个调用返回实际的密钥代码

<> P>历史原因可以追溯到Windows NT 3 .x中的DOS兼容性(或者,对于微软Windows C++中的DOS兼容,Turbo C为Windows NT)。p> IIRC(我可能弄错了一些细节…),基本的想法是:你需要做一个BIOS调用来获取键盘的hi和lo值,这意味着每个键都有一个16位的值。为了简化操作,Turbo C提供了一个很好的调用,可以将键映射到当前(8位)代码页中的字符,因此
a
将返回一个字节,
0x61
。但是没有足够的空间来映射所有内容,因此像
VK_UP
这样的特殊键将在两个单独的调用中未映射地返回,首先是hi字节
0xE0
,然后是lo字节
0x50
。微软从Borland复制了这一点,以便更容易地将代码移植到他们的编译器,然后将代码从DOS/Win3.1移植到NT,这就是MSVCRT今天仍然在做的事情,Python只是包装了实现这一点的函数

提供了更多的细节

当然,在大多数Unix终端上,向上箭头也发送字符序列,通常与该字符的光标向上显示控制序列相同,通常是
ESC
,然后
[
,然后是
A
。但人们不希望Unix上的每个键都有一个类似于
getch
的单个字符的函数返回一个值,因此没有人会感到困惑。

这在以下章节中进行了解释:

如果按下的键是特殊功能键,则返回“\000”或“\xe0”;下一次调用将返回键代码

从封面下可以看出,Python只是调用MSVCRT函数,这有点像POSIX函数,但在一个关键方面有所不同:

读取函数键或箭头键时,每个函数必须调用两次;第一次调用返回0或0xE0,第二次调用返回实际的键代码

<> P>历史原因可追溯到Windows NT 3 .x中的DOS兼容性(或者,微软Windows C++中的DOS兼容性Turbo C)。 IIRC(我可能弄错了一些细节…),基本的想法是:你要做一个BIOS调用来获取键盘的hi和lo值,这意味着每个键都有一个16位的值。为了让事情更简单,Turbo C提供了一个很好的调用,可以将键映射到当前(8位)中的字符代码页,所以
a
会返回一个字节,
0x61
。但是没有足够的空间来映射所有内容,所以像
VK\u UP
这样的特殊键会在两个不同的调用中未映射地返回,首先是hi字节
0xE0
,然后是lo字节
0x50
。Microsoft从Borland复制了它,使其成为e先将代码移植到他们的编译器,然后将代码从DOS/Win3.1移植到NT,这就是MSVCRT今天仍在做的事情,Python只是包装了实现这一点的函数

提供了更多的细节

当然,在大多数Unix终端上,向上箭头也发送字符序列,通常与该字符的光标向上显示控制序列相同,通常是
ESC
,然后
[
,然后是
A
。但是人们不希望Unix上的每个键都有一个类似于
getch
的单个字符的函数返回一个值,所以没有人会感到困惑