1. GTK+界面中显示中文的问题
开始怀疑是字符集的问题。因为在gtk中默认是使用的UTF-8字符集。因此只要字符
串转换成UTF-8就可以显示了吧。
于是尝试转换,使用了3中方法:
1,使用windows的API WideCharToMultiByte
char szName[100];
int dwMinSize = WideCharToMultiByte(CP_UTF8,NULL,L"呵呵,-1,NULL,0,NULL,FALSE);
WideCharToMultiByte(CP_UTF8,0,L"呵呵,-1,szName,dwMinSize,0,0);
2,使用了iconv转换库
3,使用g_local_to_utf8
g_locale_to_utf8("呵呵",10,NULL,NULL,NULL);
这三种方法都试过了,在绘图区域始终没法显示中文,奇怪的是在标题栏是可以显示中文的
:gdk_draw_text(pixmap,font,widget->style->black_gc,0,100,g_locale_to_utf8("呵
呵",10,NULL,NULL,NULL),10); 失败
gtk_window_set_title(GTK_WINDOW(window1),g_locale_to_utf8("呵
呵",10,NULL,NULL,NULL));就成功了
这个问题困扰了好久。
2. 针对这两个函数的调用,唯一能够引起这个问题的就是font了,难道是字体选择的不支持
中文吗?
代码如下:
GdkFont *font = NULL;
font = gdk_font_load("simsun 20");
gdk_draw_text(pixmap,font,widget->style->black_gc,0,100,g_locale_to_utf8
("呵呵1234",10,NULL,NULL,NULL),10);
显示出来的结果是:只有1234,而“呵呵”没有显示。
simsun字体肯定是支持中文的,因此问题陷入了僵局。
3. 因此跟同事和朋友交流
有人提出了一下的解决方案:
1 ,字体不应该load出来,而应该用fontset得到font。代码可以如下:
char *fontset = "-adobe-helvetica-medium-r-normal--16-*-*-*-*-*-iso8859-1, /
-studio-song-medium-r-normal--16-*-*-*-*-*-gb2312.1980-0";
GdkFont *font;
font = gdk_fontset_load (fontset);
gdk_draw_text(pixmap,font,widget->style->black_gc,0,100,g_locale_to_utf8("呵呵
1234",10,NULL,NULL,NULL),10);这样仍然不可以。
2, 在1的基础上
char str[]="呵呵1234";
for(int i=0;i<4;i++)
{
str[i] -= 0200;
}
gdk_draw_string(pixmap,font,widget->style->black_gc,0,100,str);
这样也不行
3, 修改文件的字符集
由于目前是在VC下写的代码:选择文件---高级保存---Unicode(UTF-8 无签名)-代
码页 65001
4.针对这些方案修改工程,发现1,3配合起来可以达到显示汉字的需求。如果排除1,而用
GdkFont *font = NULL;
font = gdk_font_load("simsun 20");
也无法显示,看来1是非常必须的,至于为什么,目前由于刚接触GTK还不太明白这里边的字
体的机制。