スクリプトは端末が表示できる文字を決定できますか?

スクリプトは端末が表示できる文字を決定できますか?

私はUTF-8文字を出力として表示するスクリプトを作成中です。私のGnomeターミナルでは、きれいなカエデの葉(

答え1

端末で実行されているアプリケーションには、端末が描画したグリフがどのようなものか (あるいは、それが代替文字/プレースホルダー文字であるかどうか) を端末から知る方法がありません。

アプリケーションの一つできる端末が UTF-8 をサポートしているかどうか、またサポートしている場合は可変幅文字をサポートしているかどうかを確認します。方法は次のとおりです。

  • [ 6 nESCと書いてESCを期待してカーソル位置を読み取る[ ライン ; コル R
  • 2 バイトのシーケンスを書き込みます"\xc2\xa0"。端末が UTF-8 をサポートしている場合、これは単一の非改行スペースです。端末が UTF-8 をサポートしていない場合、これは不明ですが、おそらく 2 つの文字位置を占めます (Â実際には、おそらく非改行スペースが続きます)。
  • カーソルの位置を再度読み取り、カーソルが1つまたは2つ移動したかどうかを確認します。

端末が UTF-8 をサポートしている場合は、基本的に同じトリックを使用して、可変文字幅をサポートしているかどうかを確認できます。カーソル位置を読み取り、等幅フォントで 2 倍幅になるはずの文字 (「あ」など) を書き込み、カーソル位置を再度読み取ります。端末が 2 倍幅文字をサポートしていない場合、カーソルはおそらく単純に 1 位置だけ移動しているでしょう。

関連情報