好的,所以我最近意识到了控制击键和 ASCII 控制代码之间的对应关系,例如 ^D 发送 EOT 字符,因为 EOT 是 ASCII 代码 4,而 D 是字母表中的第四个字母。我想知道超过 26 位十进制的字符(即 ESC、FS、GS、RS 和 US)的击键是什么。 Escape 键是否发送 ESC 字符? Telnet 中默认的 ^] 按键转义到 shell 怎么样?那会发送 ESC 字符吗?
如果这是题外话,我深表歉意。我找不到其他地方可以放置它。
答案1
其他控制字符的击键如下:
^[ - Escape
^\ - File Separator
^] - Group Separator
^^ - Record Separator
^_ - Unit Separator
telnet
使用组分隔符作为其交互界面的转义符。由于转义字符经常在终端应用程序中使用,因此它通常被发送到建立 telnet 连接的远端。
答案2
从ascii(7)
Linux 上跨行阅读,为了^D
使用您的信件,我们发现:
004 4 04 EOT (end of transmission) 104 68 44 D
然后^]
使用同样的对应关系:
035 29 1D GS (group separator) 135 93 5D ]
还可以通过将终端置于原始模式并打印出密钥的十六进制代码,然后在中查找十六进制代码来确认这一点ascii(7)
:
perl -MTerm::ReadKey -e 'warn "PID $$\n"; $SIG{TERM}=sub {ReadMode 0; exit};' \
-e 'ReadMode 4; while ($k=ReadKey(0)) { printf "%02x\n", ord $k }'
答案3
当键盘直接将 ASCII 代码发送到键盘端口时,是的,Control 加上字母键和其他六个键产生了 ASCII 控制代码。在 IBM 型微处理器上,键盘生成扫描代码,BIOS 或操作系统将这些代码和适当的 ASCII 代码(控制或图形)报告给应用程序。
答案4
哎呀——我之前的帖子不是一个好的答案。至少在 Linux 中,ESC 键报告的 ASCII 代码确实与 Ctrl-[ 相同,Enter 与 Ctrl-M 相同。对于退格键,Ctrl-?报告 (DEL),对于 Ctrl-Backspace,报告 Ctrl-H (BS),但它们执行相同的操作。对于删除键,会报告 ANSI 转义序列。