在fltk中用中文有点问题。
英文是这样。中文就成这个样子了。
我查了查资料,说用UTF-8编码就行了。
edit->File encoding->UTF-8
然后保存文件。
看下下边的编码指示确定是UTF-8。
编译并运行。
是不是好了?
那在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();
}