たとえば、一部のプログラムでは、線と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
奇妙なことは、htop
Unicodeの有無にかかわらず線を描くことができる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が提供する線を描画しようとしないアプリケーションは、ライブラリを効果的に利用できないことです。
つまり、同様の動作をするプログラムを見つけたら、開発者にバグとして報告する必要があります。
追加資料:
- ライングラフィック(ncurses addch マニュアルページ)
border
、wborder
、box
、hline
、whline
、vline
、wvline
、mvhline
、mvwhline
、mvvline
、mvwvline
-呪われた罫線、地平線、垂直線の作成dialog
スクリーンショット(まったく線画を使用するにはUTF-8エンコーディングが必要です)