脚本可以确定终端可以显示哪些字符吗?

脚本可以确定终端可以显示哪些字符吗?

我正在编写一个将 UTF-8 字符显示为输出的脚本。在我的 Gnome 终端中,这会打印出漂亮的枫叶(

答案1

在终端中运行的应用程序无法从终端找出终端绘制的字形是什么样的(或者即使它们是替代/占位符字符)。

应用程序的一件事要做的就是查明终端是否支持 UTF-8,如果支持,是否支持可变宽度字符。方法如下:

  • [ 6 n通过写入 ESC并期待 ESC来读取光标位置[ 线 ; R
  • 写入 2 字节序列"\xc2\xa0"。如果终端支持 UTF-8,则这是一个不间断空格。如果终端不支持 UTF-8,则它是未知的,但可能占用 2 个字符位置(Â实际上可能后面跟着不间断空格)。
  • 再次读取光标位置,找出光标移动了一个位置还是移动了两个位置

如果终端确实支持 UTF-8,那么您可以使用基本相同的技巧来确定它是否支持可变字符宽度。读取光标位置,在等宽字体中写入一个应该是双角的字符,例如“あ”,然后再次读取光标位置。如果终端不支持双角字符,则光标可能会天真地仅移动一个位置。

相关内容