我正在为一个小的 TUI(文本用户界面)练习开发 NCURSES 应用程序。不幸的是,我无法选择使用如此美妙而忠实的 ASCII。我的程序使用了很多 Unicode 框绘图字符。
我的程序已经可以检测终端是否支持颜色。我需要做类似的事情:
if(!supportsUnicode()) //I prefer camel-case, it's just the way I am.
{
fprintf(stderr, "This program requires a Unicode-capable terminal.\n\r");
exit(1);
}
else
{
//Yay, we have Unicode! some random UI-related code goes here.
}
这不仅仅是简单地包含
ncursesw
的问题。并且只是设置语言环境。我需要获取特定的终端信息,如果不会发生,实际上会抛出错误。例如,当用户尝试在可爱的 XTerm
中运行程序时,我需要抛出错误。而不是支持 Unicode 的 UXTerm
.
最佳答案
如前所述,您无法可靠地检测终端的功能。就此而言,您也无法检测到终端对颜色的支持。无论哪种情况,您的应用程序都只能检测您已配置的内容,这不是一回事。
有些人通过编写 UTF 编码的字符并使用光标位置报告来查看光标的位置(参见例如 Detect how much of Unicode my terminal supports, even through screen),在检测 Unicode 支持方面取得了部分成功。
使用 ncursesw 进行编译/链接依赖于正确配置您的区域设置,对于在 UTF-8 模式下不支持 VT100 线图的终端(例如 PuTTY)有一些解决方法。
进一步阅读:
NCURSES_NO_UTF8_ACS
ncurses(3x) 关于c - 我如何保证终端具有 NCURSES 的 Unicode/宽字符支持?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35329997/