当前位置: 技术问答>linux和unix
gtk2.0 不能直接显示中文?
来源: 互联网 发布时间:2016-11-20
本文导语: 我用GTK让它显示中文时,屏幕上出现的是中间带个叉的方框,同时打印这个警告: Pango-WARNING **: Invalid UTF-8 string passed to pango_layout_set_text() 我的测试程序很简单,就是让gtk显示一个button,把button取一中文名。可是...
我用GTK让它显示中文时,屏幕上出现的是中间带个叉的方框,同时打印这个警告:
Pango-WARNING **: Invalid UTF-8 string passed to pango_layout_set_text()
我的测试程序很简单,就是让gtk显示一个button,把button取一中文名。可是它的中文名无法显示。
我在网上找,说是编码方式不是UTF-8所以不能显示,用g_locale_to_utf8()函数可以进行转换,可是我加了这个,也不行,结果是连“带个叉的方框”都没有了。这是怎么回事?
请教这个问题如何解决?
PS:1、我要直接显示中文,不是用gettext来翻译的;2、我有在usr/share/fonts/下加中文包(chinese)。
下面是我代码:很简单的测试,就一个组盒框和一个按钮
#include
gboolean combo_changed(GtkComboBox *comboBox, GtkLabel *label)
{
gchar *active = gtk_combo_box_get_active_text(comboBox);
gtk_label_set_text(label, active);
return 0;
}
int main(int argc, char *argv[])
{
GtkWidget *window;
GtkWidget *comboBox;
GtkWidget *label;
GtkWidget *button;
GtkWidget *fixed;
GtkWidget *vbox;
gtk_set_locale();
gtk_init(&argc, &argv);
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_widget_set_usize(window,720,576);
fixed = gtk_fixed_new ();
gtk_container_add (GTK_CONTAINER (window), fixed);
comboBox = gtk_combo_box_new_text();
gtk_combo_box_append_text(GTK_COMBO_BOX(comboBox), "caterpillar");
gtk_combo_box_append_text(GTK_COMBO_BOX(comboBox), "momor");
gtk_combo_box_append_text(GTK_COMBO_BOX(comboBox),"确定");
gtk_combo_box_append_text(GTK_COMBO_BOX(comboBox), "bush");
gtk_combo_box_set_active(GTK_COMBO_BOX(comboBox), 0);
label = gtk_label_new("caterpillar");
vbox = gtk_hbox_new(TRUE, 5);
gtk_box_pack_start(GTK_BOX(vbox), comboBox, TRUE, TRUE, 5);
gtk_box_pack_start(GTK_BOX(vbox), label, TRUE, TRUE, 5);
gtk_fixed_put (GTK_FIXED (fixed),vbox, 50, 50);
//gtk_container_add(GTK_CONTAINER(fixed), vbox);
g_signal_connect(GTK_OBJECT(comboBox), "changed",
G_CALLBACK(combo_changed), label);
g_signal_connect(GTK_OBJECT(window), "destroy", G_CALLBACK(gtk_main_quit), NULL);
button = gtk_button_new_with_label (g_locale_to_utf8("确定",-1,NULL,NULL,NULL));//要翻译的内容Hello World!
gtk_fixed_put (GTK_FIXED (fixed), button, 460, 450);
gtk_widget_show_all(window); gtk_main(); return 0;
}
看,我用以上两种方法都不能正确显示中文,
请各位帮帮忙,先谢谢了!
Pango-WARNING **: Invalid UTF-8 string passed to pango_layout_set_text()
我的测试程序很简单,就是让gtk显示一个button,把button取一中文名。可是它的中文名无法显示。
我在网上找,说是编码方式不是UTF-8所以不能显示,用g_locale_to_utf8()函数可以进行转换,可是我加了这个,也不行,结果是连“带个叉的方框”都没有了。这是怎么回事?
请教这个问题如何解决?
PS:1、我要直接显示中文,不是用gettext来翻译的;2、我有在usr/share/fonts/下加中文包(chinese)。
下面是我代码:很简单的测试,就一个组盒框和一个按钮
#include
gboolean combo_changed(GtkComboBox *comboBox, GtkLabel *label)
{
gchar *active = gtk_combo_box_get_active_text(comboBox);
gtk_label_set_text(label, active);
return 0;
}
int main(int argc, char *argv[])
{
GtkWidget *window;
GtkWidget *comboBox;
GtkWidget *label;
GtkWidget *button;
GtkWidget *fixed;
GtkWidget *vbox;
gtk_set_locale();
gtk_init(&argc, &argv);
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_widget_set_usize(window,720,576);
fixed = gtk_fixed_new ();
gtk_container_add (GTK_CONTAINER (window), fixed);
comboBox = gtk_combo_box_new_text();
gtk_combo_box_append_text(GTK_COMBO_BOX(comboBox), "caterpillar");
gtk_combo_box_append_text(GTK_COMBO_BOX(comboBox), "momor");
gtk_combo_box_append_text(GTK_COMBO_BOX(comboBox),"确定");
gtk_combo_box_append_text(GTK_COMBO_BOX(comboBox), "bush");
gtk_combo_box_set_active(GTK_COMBO_BOX(comboBox), 0);
label = gtk_label_new("caterpillar");
vbox = gtk_hbox_new(TRUE, 5);
gtk_box_pack_start(GTK_BOX(vbox), comboBox, TRUE, TRUE, 5);
gtk_box_pack_start(GTK_BOX(vbox), label, TRUE, TRUE, 5);
gtk_fixed_put (GTK_FIXED (fixed),vbox, 50, 50);
//gtk_container_add(GTK_CONTAINER(fixed), vbox);
g_signal_connect(GTK_OBJECT(comboBox), "changed",
G_CALLBACK(combo_changed), label);
g_signal_connect(GTK_OBJECT(window), "destroy", G_CALLBACK(gtk_main_quit), NULL);
button = gtk_button_new_with_label (g_locale_to_utf8("确定",-1,NULL,NULL,NULL));//要翻译的内容Hello World!
gtk_fixed_put (GTK_FIXED (fixed), button, 460, 450);
gtk_widget_show_all(window); gtk_main(); return 0;
}
看,我用以上两种方法都不能正确显示中文,
请各位帮帮忙,先谢谢了!
|
你装GTK的时候你的环境变量没设置好。字符集最好设置成GB2312的吧。