Terminal

腳本能否確定終端可以顯示哪些字元?

  • May 24, 2016

我正在編寫一個將 UTF-8 字元顯示為輸出的腳本。在我的 Gnome 終端中,這會列印出漂亮的楓葉 (🍁):

$ echo -e '\xF0\x9F\x8D\x81'

在 rxvt 中,它列印出一個框(它用於“未知”的字元)。 locale兩者都是 UTF-8,但字型不同。有沒有辦法在使用者的機器上確定是否支持某些字元?

在終端中執行的應用程序無法從終端中找出終端繪製的字形是什麼樣的(或者即使它們是替代/佔位符字元)。

應用程序可以做的一件事是查明終端是否支持 UTF-8,如果支持,它是否支持可變寬度字元。方法如下:

  • [ 6 n通過寫 ESC並期望 ESC [ line col讀取游標位置; R
  • 寫入 2 字節序列"\xc2\xa0"。如果終端支持 UTF-8,則這是一個不間斷空格。如果終端不支持 UTF-8,則它是未知的,但可能佔據 2 個字元位置(Â實際上可能後面是不間斷空格)。
  • 再次讀取游標位置,找出游標移動了一個位置或兩個位置

如果終端確實支持 UTF-8,那麼您可以通過基本上使用相同的技巧來確定它是否支持可變字元寬度。讀取游標位置,在等寬字型中寫入一個應該是雙寬的字元,例如あ,然後再次讀取游標位置。如果終端不支持雙角字元,游標可能會天真地只移動了一個位置。

引用自:https://unix.stackexchange.com/questions/284990