6

根据FLTK 1.3.2 文档

Unicode 支持是最近才添加到 FLTK 中的,并且仍然不完整。

但是,应该执行以下操作:

需要注意的是,在 FLTK 中 Unicode 和 UTF-8 的初始实现涉及三个重要领域:

  • 提供Unicode字符表和一些简单的相关功能
  • 将 char* 变量和函数参数从每字符单字节表示转换为 UTF-8 可变长度
    序列
  • 修改显示字体界面以接受通用 Unicode 字符或 UCS 代码数字,而不仅仅是 ASCII 或 Latin1 字符。

我的问题是,我如何在我的 FLTK 控件上实际显示 Unicode?我找不到任何接受 Unicode 的小部件功能。例如,这是label函数的签名:

void Fl_Widget::label ( const char * text )

4

1 回答 1

5

从您发布的链接:

FLTK 将使用 UTF-8 编码完全转换为 Unicode。如果底层操作系统需要不同的编码,FLTK 将根据需要转换字符串。

您列出的三个要点是构成其实现 Unicode 支持的领域;也就是说,这些是他们正在做或计划做的事情。

  • FLTK 实现者将提供 Unicode 字符表和一些简单的相关功能
  • FLTK 实现者将把 char* 变量和函数参数从使用 SBCS 转换为 UTF-8。(也就是说,他们将重新实现 FLTK 函数和变量,以将 char* 字符串视为 UTF-8。)
  • FLTK 实现者将修改显示字体界面,使其不仅仅涵盖 ASCII 和 Latin1 字符。

我的问题是,我如何在我的 FLTK 控件上实际显示 Unicode?我找不到任何接受 Unicode 的小部件功能。例如,这是 label 函数的签名:

void Fl_Widget::label ( const char * text )

有很多人错误地使用“Unicode”来表示使用 2 字节字符的编码。您链接到的 FLTK 文档不会犯此错误。了解这一点后,文档清楚地说明了如何使用带有上述签名的 Unicode:使用 UTF-8 编码将 Unicode 数据作为 char* 字符串传递。例如,如果您使用的编译器使用 UTF-8 作为执行编码:

widget.label("кошка 日本国");

或者,如果您有 C++11 编译器:

widget.label( u8"кошка 日本国");
于 2013-10-07T13:30:40.003 回答