端末:特殊文字の表示


11

htop線やフレームなどの一部のプログラムでは、正しく表示されません。代わりに、-およびとして表示され/ます。

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

しかし、別のマシンでは、それらは適切な行として正しく表示されます。

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

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

関連性がある場合:私のシステムはDebian Wheezy、私のインタープリターはbash私のターミナルエミュレーターはgnome-terminal


端末で使用されているフォントを変更してみましたか?
goldilocks 2013年

2
ボックスや疑問符などのプレースホルダー文字がUnicode文字の代わりになっていれば、これは可能な解決策ですが、彼の例ではhtopASCII文字の表示を示しています。ただし、デフォルトのターミナルフォントが非Unicodeの場合、エンコードも可能性が高いため、答えに追加しました。
raehik 2013年

回答:


11

一番上の例は非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に変更してみてください。

[不思議なことに、シェルセッションでロケールを一度htopASCIIに変更すると、変更後も常にASCII文字が表示されることがわかりました。なんらかの理由でシェルのロケールを時々変更している場合は、それが問題である可能性があります。]


3

奇妙なことに、htopncurses を使用しているため、Unicodeの有無にかかわらず線を描画できます。ただし、のソースコードを見ると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で提供される線画を使用しようとしないアプリケーションでも、ライブラリを効果的に使用できません。

つまり、そのように動作するプログラムに遭遇した場合、それをバグとして開発者に報告する必要があります。

参考文献:


それは私の問題を直接解決しませんでしたが(で予期されるUnicode線描画文字を設定LANG/ LC_ALL有効化htop)、これは非常に興味深いものです。説明していただきありがとうございます。
wrksprfct
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.