Terminal: Anzeige von Sonderzeichen

11

In einigen Programmen, z. B. werden htopdie Linien und Rahmen nicht korrekt angezeigt. Stattdessen werden sie als -und angezeigt /.

Geben Sie hier die Bildbeschreibung ein

Auf einem anderen Computer werden sie jedoch korrekt als richtige Zeilen angezeigt:

Geben Sie hier die Bildbeschreibung ein

Ich bin nicht sicher, ob dies ein Terminalproblem ist oder ob möglicherweise ein Paket erforderlich ist.

Falls es relevant ist: Mein System ist Debian Wheezy, mein Interpreter ist bashund mein Terminalemulator istgnome-terminal

Martin Vegter
quelle
Haben Sie versucht, die vom Terminal verwendete Schriftart zu ändern?
Goldlöckchen
2
Dies wäre eine mögliche Lösung, wenn anstelle der Unicode-Zeichen Platzhalterzeichen wie Kästchen oder Fragezeichen verwendet würden. Sein Beispiel zeigt jedoch die htopAnzeige von ASCII-Zeichen. Wenn die Standard-Terminalschrift jedoch Nicht-Unicode ist, ist die Codierung wahrscheinlich auch so, daher habe ich sie meiner Antwort hinzugefügt.
Raehik

Antworten:

11

Ihr oberstes Beispiel wird mit einem Nicht-Unicode-Gebietsschema (dh ASCII) ausgeführt. Überprüfen Sie Ihre $ LANG-Umgebungsvariable (versuchen Sie es export | grep LANG). Sie werden höchstwahrscheinlich kein .UTF-8Suffix finden. Versuchen Sie es hinzuzufügen:

export LANG=$LANG.UTF-8

Ihr anderes Beispiel wird mit einem UTF-8-Gebietsschema ausgeführt, das der Standard für aktuelle Shells sein sollte. Es scheint, dass es htopIhr Gebietsschema erkennt und entweder ASCII- oder Unicode-Zeichen anzeigt. Im unteren Bild erhalten Sie also schöne Unicode-Zeichen, während Sie mit ASCII einige ziemlich provisorische Zeichen erhalten. Ich würde vorschlagen, das Gebietsschema des Computers des oberen Bilds in ein Unicode-Gebietsschema zu ändern (siehe Gebietsschema - Debian-Wiki ).

Wenn das nicht funktioniert, ist möglicherweise Ihr Terminalemulator das Problem. Die Standardcodierung kann Nicht-Unicode sein. Ändern Sie die Standardcodierung Ihres Terminalemulators in UTF-8 (in xfce4-terminalIch habe sie auf der Registerkarte Erweitert gefunden). Wenn Sie dies nicht können, unterstützt Ihre aktuelle Schriftart möglicherweise Unicode nicht: Versuchen Sie, Ihre Schriftart in eine Unicode-Schriftart zu ändern.

[Seltsamerweise stellte ich fest, dass, sobald ich mein Gebietsschema einmal in einer Shell-Sitzung in ASCII geändert hatte, htopdie ASCII-Zeichen auch nach dem Zurücksetzen immer angezeigt werden. Dies könnte Ihr Problem sein, wenn Sie aus irgendeinem Grund gelegentlich Ihr Gebietsschema in Ihrer Shell ändern.]

raehik
quelle
3

Das Seltsame ist, dass htopncurses verwendet wird, die Linien mit / ohne Unicode zeichnen können. Ein Blick auf den Quellcode in CRT.czeigt jedoch die Erklärung:

#ifdef HAVE_LIBNCURSESW
   if(strcmp(nl_langinfo(CODESET), "UTF-8") == 0)
      CRT_utf8 = true;
   else
      CRT_utf8 = false;
#endif

   CRT_treeStr =
#ifdef HAVE_LIBNCURSESW
      CRT_utf8 ? CRT_treeStrUtf8 :
#endif
      CRT_treeStrAscii;

und der CRT_treeStrUtf8Wert ist

const char *CRT_treeStrUtf8[TREE_STR_COUNT] = {
   "\xe2\x94\x80", // TREE_STR_HORZ ─
   "\xe2\x94\x82", // TREE_STR_VERT │
   "\xe2\x94\x9c", // TREE_STR_RTEE ├
   "\xe2\x94\x94", // TREE_STR_BEND └
   "\xe2\x94\x8c", // TREE_STR_TEND ┌
   "+",            // TREE_STR_OPEN +
   "\xe2\x94\x80", // TREE_STR_SHUT ─
};

Ncurses (jede Curses-Implementierung) verfügt jedoch über tragbare Symbole für diese, die nicht davon abhängen, ob die Codierung UTF-8 ist oder nicht. Einige Anwendungen (z. B. die Option des Dialogfelds--ascii-lines ) bieten eine Option für die Verwendung der ASCII-Strichzeichnung. Eine Anwendung, die nicht einmal versucht, die in ncurses bereitgestellte Strichzeichnung zu verwenden, nutzt die Bibliothek jedoch nicht effektiv.

Kurz gesagt, wenn Sie auf ein Programm stoßen, das sich so verhält, sollten Sie es den Entwicklern als Fehler melden.

Weiterführende Literatur:

Thomas Dickey
quelle
Obwohl es mein Problem nicht direkt gelöst hat (Einstellen LANG/ LC_ALLAktivieren der erwarteten Zeichen für das Zeichnen von Unicode-Linien htop), ist dies sehr interessant. Vielen Dank, dass Sie sich die Zeit genommen haben, es zu erklären!
Wrksprfct