codeblocks和VS2019下的fltk使用中文



在fltk中用中文有点问题。


英文是这样。中文就成这个样子了。

我查了查资料,说用UTF-8编码就行了。


edit->File encoding->UTF-8

然后保存文件。


看下下边的编码指示确定是UTF-8。

编译并运行。


codeblocks和VS2019下的fltk使用中文

是不是好了?

那在vs2019中呢?

方法1

在开头加入要求使用UTF-8编码的指令,有些VS版本不支持。

//使用UTF-8字符集 #pragma execution_character_set("utf-8")

方法2

字符串前面加u8标记这是UTF-8字符串,给fltk使用就不会出错。

char str[] = u8"这是UTF-8字符";

方法3

在配置属性那里加/utf8

这个和方法1是性质一样的。

方法4

unicode 转化成UTF-8字符串

//------------------------------------------------------ const size_t MAX = 256; char utf8[MAX]; wchar_t wstr[] = L"字符串转换"; fl_utf8fromwc(utf8, MAX, wstr, wcslen(wstr)); //-------------------------------------------------------- Fl_Box* box = new Fl_Box(20, 20, 260, 100, utf8); box->box(FL_UP_BOX); box->labelsize(36); box->labelfont(FL_BOLD + FL_ITALIC); box->labeltype(FL_SHADOW_LABEL);

后面是完整代码


/*使用UTF-8字符集 #pragma execution_character_set("utf-8") */ #ifdef _DEBUG #pragma comment(lib,"fltk.lib") #else #pragma comment(lib,"fltk.lib") #endif #include #include "FL/Fl.H" #include "FL/Fl_Window.H" #include "FL/Fl_Box.H" #include <FL/Fl.H> #include <FL/Fl_Window.H> #include <FL/Fl_Box.H> int main(int argc, char** argv) { Fl_Window* window = new Fl_Window(300, 400); //------------------------------------------------------ const size_t MAX = 256; char utf8[MAX]; wchar_t wstr[] = L"字符串转换"; fl_utf8fromwc(utf8, MAX, wstr, wcslen(wstr)); //-------------------------------------------------------- Fl_Box* box = new Fl_Box(20, 20, 260, 100, utf8); box->box(FL_UP_BOX); box->labelsize(36); box->labelfont(FL_BOLD + FL_ITALIC); box->labeltype(FL_SHADOW_LABEL); char str[] = u8"这是UTF-8字符"; //--------------------------------------------------------- Fl_Box* box1 = new Fl_Box(20, 120, 260, 100, str); box1->box(FL_UP_BOX); box1->labelsize(36); box1->labelfont(FL_BOLD + FL_ITALIC); box1->labeltype(FL_SHADOW_LABEL); window->end(); window->show(argc, argv); return Fl::run(); }


给我们留言