c - 我如何保证终端具有 NCURSES 的 Unicode/宽字符支持?

标签 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.
}

这不仅仅是简单地包含 ncursesw 的问题。并且只是设置语言环境。我需要获取特定的终端信息,如果不会发生,实际上会抛出错误。例如,当用户尝试在可爱的 XTerm 中运行程序时,我需要抛出错误。而不是支持 Unicode 的 UXTerm .

最佳答案

如前所述,您无法可靠地检测终端的功能。就此而言,您也无法检测到终端对颜色的支持。无论哪种情况,您的应用程序都只能检测您已配置的内容,这不是一回事。

有些人通过编写 UTF 编码的字符并使用光标位置报告来查看光标的位置(参见例如 Detect how much of Unicode my terminal supports, even through screen),在检测 Unicode 支持方面取得了部分成功。

使用 ncursesw 进行编译/链接依赖于正确配置您的区域设置,对于在 UTF-8 模式下不支持 VT100 线图的终端(例如 PuTTY)有一些解决方法。

进一步阅读:

  • Line Graphics curs_add_wch(3x)
  • NCURSES_NO_UTF8_ACS ncurses(3x)
  • 关于c - 我如何保证终端具有 NCURSES 的 Unicode/宽字符支持?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35329997/

    相关文章:

    c - 使用 Check for C 单元测试时出现的问题

    无法使用函数 gst_element_link_many 链接 GStreamer 库中的元素

    unicode - llvm-clang;包含 unicode 字符的函数/变量名称

    windows - Casper CLI 选项不处理 Windows 上的空格

    c++ - 在 C++ 中包含非标准 C 头文件

    c - 在函数内部使用变量未声明错误

    python unicode处理打印和sys.stdout.write之间的差异

    c++ - FreeType 中的 Unicode 问题

    java - 从终端运行java程序

    go - Os/exec 优雅、循环兼容的标准输入和标准输出输入/输出