Mas*_*ugh 5 c unicode terminal ncurses widechar
我正在为一个小的 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.
}
Run Code Online (Sandbox Code Playgroud)
这不仅仅是简单地包含ncursesw和设置语言环境的问题。我需要获取特定的终端信息,如果不会发生,实际上会抛出错误。例如,当用户尝试以可爱的XTerm而不是支持 Unicode 的UXTerm.
如前所述,您无法可靠地检测终端的功能。就此而言,您也无法检测终端对颜色的支持。无论哪种情况,您的应用程序都只能检测您配置的内容,这不是同一件事。
有些人通过编写 UTF 编码字符并使用光标位置报告来查看光标所在位置,在检测 Unicode 支持方面取得了部分成功(例如,请参阅检测我的终端支持多少 Unicode,甚至通过屏幕)。
使用ncursesw进行编译/链接依赖于正确配置区域设置,并针对在 UTF-8 模式下不支持 VT100 线条图形的终端(例如 PuTTY)提供一些解决方法。
进一步阅读:
NCURSES_NO_UTF8_ACSncurses(3x)