TERM=fbterm 导致画框字符(通过诅咒)被打乱

TERM=fbterm 导致画框字符(通过诅咒)被打乱

我正在fbterm使用python-curses库编写 TUI 软件。

为了获得全彩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=fbterm并运行我的Python程序时。字符串文本没问题,但框/矩形绘图字符 ( - | ...) 被扰乱为 (Ä ³ ¿等)。

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

我做错了什么(失踪)?

昨天我交叉发布了堆栈溢出fbterm,然后我意识到这个问题更多地与环境价值有关。所以我在这里发帖。原始帖子包含我的推理、我做了什么、我如何得出结论等等......(更详细)。

答案1

fbterm如果我在任何字符映射既不是 ANSI_X3.4-1968(C区域设置中的 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 位设置p的字节,因此我认为在使用 ISO8859-1 等字符集时,它与普通字符发生冲突(例如,映射到上面的VT100 的水平线字符\304)符合ÄISO8859-1 又名 latin1)。

如果有可用的语言环境,最简单的解决方法是使用 UTF-8 语言环境。

请参阅locale -a参考资料 获取系统上可用的区域设置列表,并fbterm以以下形式开始:

LANG=en_US.UTF-8 fbterm

例如,fbterm以 UTF-8 作为字符集的美国英语语言环境启动(假设未设置LC_ALL和环境变量)。LC_CTYPE您可能还想stty iutf8在该终端中运行,因为在 UTF-8 语言环境中启动时,fbterm 似乎不会自行执行此操作。

在基于 Debian 的系统上,您可以dpkg-reconfigure locales以超级用户身份运行来更改默认系统区域设置。

相关内容