TERM = fbtermを使用すると、フレーム文字は(呪いで)スクランブルされます。

TERM = fbtermを使用すると、フレーム文字は(呪いで)スクランブルされます。

私はライブラリをfbterm使ってpython-cursesTUIソフトウェアを書いています。

フルカラーを取得するには、fbtermマニュアルページを読んで環境変数TERMfbterm

マニュアルページ:By default, FbTerm sets environment variable "TERM" to value "linux", user need run "TERM=fbterm /path/to/program" to enable 256 color mode.

TERM=fbtermPythonプログラムを設定して実行するとき。文字列リテラルは大丈夫ですが、ボックス/長方形の描画文字(- | ...)が混在しています(Ä ³ ¿など)。

 ÚÄÄÄÄÄ¿
 ³Meas.³
 ÀÄÄÄÄÄÙ ÚÄÄÄÄÄÄÄÄÄÄÄÄ¿ÚÄÄÄÄÄÄÄÄÄÄÄÄ¿
 ÚÄÄÄÄÄ¿ ³1-shot      ³³n-shot      ³
 ³Setup³ ³            ³³            ³
 ÀÄÄÄÄÄÙ ³            ³³            ³
 ÚÄÄÄÄÄ¿ ³            ³³            ³
 ³Data ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÙÀÄÄÄÄÄÄÄÄÄÄÄÄÙ
 ÀÄÄÄÄÄÙ
 ÚÄÄÄÄÄ¿
 ³About³ ÚÄÄÄÄÄÄÄÄÄÄÄÄ¿ÚÄÄÄÄÄÄÄÄÄÄÄÄ¿
 ÀÄÄÄÄÄÙ ³Target      ³³Weather     ³
 ÚÄÄÄÄÄ¿ ³            ³³            ³
 ³Sys. ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÙÀÄÄÄÄÄÄÄÄÄÄÄÄÙ
 ÀÄÄÄÄÄÙ

私が何を間違っているのでしょうか?

昨日はクロスポスティングをしました。スタックオーバーフローfbtermそれから、問題が環境的価値とより関連していることに気づきました。だからここに書いてください。元の投稿には、私の推論、私がしたこと、私が結論に達した方法などが含まれています。 (詳細)

答え1

fbtermC文字マップがANSI_X3.4-1968(ロケールのASCII)もUTF-8でもないロケールで始まる場合、それを再現できます(ブロック図は機能しません)。出力を確認して、locale charmapそのロケール(出力に応じてISO-8859-1またはISO-8859-15のいずれか)に使用されている文字マップを確認し、locale現在のロケール構成を確認してください。

$ infocmp -1 fbterm | grep acs
        acsc=+\020\,\021-\030.^Y0\333`\004a\261f\370g\361h\260i\316j\331k\277l\332m\300n\305o~p\304q\304r\304s_t\303u\264v\301w\302x\263y\363z\362{\343|\330}\234~\376,
        rmacs=\E[10m,
        smacs=\E[11m,

fbtermブロックダイアグラム文字はビット8が設定されたバイトであることがわかるので、ISO8859-1などの文字セットを使用すると、ISO8859-1などの文字セットを使用すると、p通常の文字(たとえば、上記のVT100にマップされた水平線文字)と衝突すると思われます。 1 1はラテン語としても知られています1)。\304Ä

最も簡単な解決策は、可能であればUTF-8ロケールを使用することです。

次に始めて、locale -aシステムで利用可能なロケールのリストについては、リソースを参照してください。fbterm

LANG=en_US.UTF-8 fbterm

たとえば、fbterm米国英語ロケールは文字セットとしてUTF-8で始まります(LC_ALLおよび環境変数が設定されていないと仮定)。 fbtermはUTF-8ロケールで実行されたときにそれ自体がこれを行わないように見えるので、その端末で実行したいかもしれませんLC_CTYPEstty iutf8

Debianベースのシステムでは、dpkg-reconfigure localesスーパーユーザーとして実行してデフォルトのシステムロケールを変更できます。

関連情報