端末:特殊文字表示

端末:特殊文字表示

たとえば、一部のプログラムでは、線とhtopフレームが正しく表示されません。代わり-に合計として表示されます/

ここに画像の説明を入力してください。

ただし、他のコンピュータでは正しい行で正しく表示されます。

ここに画像の説明を入力してください。

これが端末の問題なのか、それともいくつかのパッケージが必要かどうかはわかりません。

該当する場合: 私のシステムは Debian Wheezy、私の通訳者はbash、私の端末エミュレータは次のとおりです。gnome-terminal

答え1

最良の例は、Unicodeではなくロケール(ASCIIなど)を使用して実行されています。 $LANG環境変数を確認してください(試してみてください)。サフィックスがexport | grep LANG見つからない可能性が高いです。.UTF-8追加してみてください:

export LANG=$LANG.UTF-8

他の例は、最近のシェルのデフォルト値UTF-8ロケールで実行されています。これはhtopロケールを検出し、ASCIIまたはUnicode文字を表示するようです。したがって、下の図から素敵なUnicode文字を取得し、ASCIIを使用すると素晴らしい一時文字を取得できます。上の図にあるコンピュータのロケールをUnicodeロケールに変更することをお勧めします(参照ロケール - Debian Wiki)。

それでもうまくいかないと、あなたの問題かもしれません。端末エミュレータ問題です。デフォルトのエンコーディングはUnicodeではないかもしれません。ターミナルエミュレータのデフォルトのエンコーディングをUTF-8に変更します(詳細xfce4-terminalタブで見つかりました)。そうでない場合、現在のフォントがUnicodeをサポートしていない可能性があります。フォントをUnicodeに変更してみてください。

[奇妙なことに、シェルセッションで一度ロケールをASCIIに変更すると、htop再変更後も常にASCII文字が表示されることがわかりました。何らかの理由でシェルで時々ロケールを変更する場合は、これが問題かもしれません。 ]

答え2

奇妙なことは、htopUnicodeの有無にかかわらず線を描くことができるncursesを使用することです。しかし、ソースコードを見るとCRT.cディスプレイの指示:

#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;

そしてCRT_treeStrUtf8値は

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(すべてのcurses実装)には、エンコードがUTF-8かどうかに依存しない移植可能なシンボルがあります。いくつかのアプリケーション(例:会話オプション--ascii-linesオプションASCIIを使用して線を描くがncursesが提供する線を描画しようとしないアプリケーションは、ライブラリを効果的に利用できないことです。

つまり、同様の動作をするプログラムを見つけたら、開発者にバグとして報告する必要があります。

追加資料:

関連情報