unix – 我可以确定终端是否解释C1控制代码?
发布时间:2020-12-15 22:55:53 所属栏目:安全 来源:网络整理
导读:ISO / IEC 2022定义了 the C0 and C1 control codes.C0集是ASCII,ISO-8859-1和UTF-8(例如ESC,CR,LF)中0x00和0x1f之间熟悉的代码. 一些VT100终端仿真器(例如屏幕(1),PuTTY)也支持C1集.这些是0x80和0x9f之间的值(例如,0x84将光标向下移动一行). 我正在显示用户
ISO / IEC 2022定义了
the C0 and C1 control codes.C0集是ASCII,ISO-8859-1和UTF-8(例如ESC,CR,LF)中0x00和0x1f之间熟悉的代码.
一些VT100终端仿真器(例如屏幕(1),PuTTY)也支持C1集.这些是0x80和0x9f之间的值(例如,0x84将光标向下移动一行). 我正在显示用户提供的输入.我不希望用户输入能够改变终端状态(例如移动光标).我目前正在过滤出C0集中的字符代码;但是我想有条件地过滤出C1集,如果终端将它们解释为控制码. 有没有办法从像termcap这样的数据库中获取这些信息? 解决方法
我能想到的唯一方法就是使用C1请求并测试返回值:
$echo `echo -en "x9bc"` ^[[?1;2c $echo `echo -e "x9b5n"` ^[[0n $echo `echo -e "x9b6n"` ^[[39;1R $echo `echo -e "x9b0x" ` ^[[2;1;1;112;112;1;0x 以上是: CSI c Primary DA; request Device Attributes CSI 5 n DSR; Device Status Report CSI 6 n CPR; Cursor Position Report CSI 0 x DECREQTPARM; Request Terminal Parameters ESR维护的terminfo / termcap(link)在用户字符串7和9(user7 / u7,user9 / u9)中有几个这样的请求:
例: $echo `tput u7` ^[[39;1R $echo `tput u9` ^[[?1;2c 当然,如果您只想防止显示损坏,可以使用较少的方法,并让用户在显示/不显示控制字符(-r和-R选项,更少)之间切换.此外,如果您知道输出字符集,则ISO-8859字符集会为控制代码保留C1范围(因此它们在该范围内没有可打印的字符). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |