Kann ein Skript bestimmen, welche Zeichen ein Terminal anzeigen kann?

Kann ein Skript bestimmen, welche Zeichen ein Terminal anzeigen kann?

Ich arbeite an einem Skript, das UTF-8-Zeichen als Ausgabe anzeigt. In meinem Gnome-Terminal druckt dies ein hübsches Ahornblatt aus (

Antwort1

Eine in einem Terminal ausgeführte Anwendung kann vom Terminal nicht erfahren, wie die vom Terminal gezeichneten Glyphen aussehen (oder ob es sich überhaupt um Ersatz-/Platzhalterzeichen handelt).

Eine Sache, die AnwendungdürfenSie müssen lediglich herausfinden, ob das Terminal überhaupt UTF-8 unterstützt und, wenn ja, ob es Zeichen mit variabler Breite unterstützt. Die Methode ist wie folgt:

  • Lesen Sie die Cursorposition, indem Sie ESC schreiben [ 6 nund ESC erwarten[ Linie ; spalte R
  • Schreiben Sie die 2-Byte-Sequenz "\xc2\xa0". Wenn das Terminal UTF-8 unterstützt, ist dies ein einzelnes geschütztes Leerzeichen. Wenn das Terminal UTF-8 nicht unterstützt, ist dies etwas Unbekanntes, das aber wahrscheinlich 2 Zeichenpositionen einnimmt (wahrscheinlich Âgefolgt von einem geschützten Leerzeichen).
  • Lesen Sie die Cursorposition erneut ab und stellen Sie fest, ob sich der Cursor um eine oder zwei Positionen bewegt hat.

Wenn das Terminal UTF-8 unterstützt, können Sie mit demselben Trick herausfinden, ob es variable Zeichenbreiten unterstützt. Lesen Sie die Cursorposition, schreiben Sie ein Zeichen, das in Monospace-Schriftarten doppelt so breit sein soll, z. B. あ, und lesen Sie dann die Cursorposition erneut. Wenn das Terminal keine doppelt so breiten Zeichen unterstützt, hat sich der Cursor wahrscheinlich nur um eine Position bewegt.

verwandte Informationen