我试图渲染一个unicode角色在TCL / TK中绘制一个剪刀标记(✂)
我正在使用X11 API“void XwcDrawString(Display * display,Drawable d,XFontSet font_set,GC gc,int x,int y,wchar_t * string,int num_wchars)”
/* This is my code */
setlocale(LC_ALL, "");
wchar_t scr = 0x2702;
char *fontname;
fontname = (char *)malloc(strlen("ISO10646-1") + 3);
if (fontname) sprintf(fontname, "%s,*", "ISO10646-1");
else fontname = ",*";
char **missing_charset_list_return;
int missing_charset_count_return;
char *def_string_return;
XFontSet font_set = XCreateFontSet(ths->display, fontname, &missing_charset_list_return, &missing_charset_count_return, &def_string_return);
XwcDrawString(ths->display, ths->drawable, font_set, ths->gc, x, y, &scr, 1);
我希望在这里绘制剪刀标记,但是会打印一些垃圾文本。
我怀疑我在API XwcDrawString中设置了错误的字体名称(虽然不确定)。所以,任何人都可以告诉我这个代码有什么问题或者任何其他方式来渲染unicode字符。
最简单的方法可能是使用Tk内置的字体引擎,它可以处理奇怪的字体,后备字符,编码等等。
tkfont = Tk_GetFont(interp, tkwin, "Arial 14"); // Needs to be *something*
string = "\xe2\x9c\x82"; // UTF-8 encoded version of ✂
gcValues.foreground = XBlackPixel(ths->display, 0); // The colour to draw in
gcValues.font = Tk_FontId(tkfont); // Must match value passed to Tk_DrawChars
gc = Tk_GetGC(tkwin, GCForeground | GCFont, &gcValues);
Tk_DrawChars(ths->display, ths->drawable, gc, tkfont, string, strlen(string), x, y);
Tk_FreeGC(gc);
Tk_FreeFont(tkfont);