Python msvcrt.getch()方法中的\xe0是什么?
在msvcrt.getch()方法中,当我输入任何不在ascii表中的值时,我总是得到“\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
>>>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
的单个字符的函数返回一个值,所以没有人会感到困惑