Chinaunix首页 | 论坛 | 博客
  • 博客访问: 65712
  • 博文数量: 13
  • 博客积分: 1692
  • 博客等级: 上尉
  • 技术积分: 160
  • 用 户 组: 普通用户
  • 注册时间: 2007-06-29 20:42
文章分类

全部博文(13)

文章存档

2011年(1)

2010年(1)

2009年(7)

2008年(4)

我的朋友
最近访客

分类: C/C++

2009-05-10 06:51:56

在GTK+编写程序,免不了要接触中文,主要有中文字符显示和读取(保存)含有中文字符路径的文件。这些操作主要涉及下面两个Glib函数: 
gchar *g_locale_to_utf8(const gchar *opsysstring, gssize len, gsize *bytes_read, gsize *bytes_written, GError **error);
gchar *g_locale_from_utf8(const gchar *utf8string,gssize len, gsize *bytes_read, gsize *bytes_written, GError **error);
GTK+中一般使用的是UTF-8字符编码,如果要在GTK+ widget上显示中文字符,则要使用g_locale_to_utf8()函数,而在GTK+程序中要在console显示中文字符或者fopen()读取含有中文字符路径的文件时,则用g_locale_from_utf8()。函数的具体说明可以参考GLib Reference Manual。
上述两个函数的参数比较多,实际使用中比较繁琐,可以对其进行一次封装:

char *_(char *string)
{
    return(g_locale_to_utf8(string, -1, NULL, NULL, NULL));
}

 

char *__(char *string)
{
    return(g_locale_from_utf8(string, -1, NULL, NULL, NULL));
}

这样使用就方便很多了。

下面举例说明用法:

(1). 在GTK+ widget上显示中文:

label = gtk_label_new(_("中文label"));

(2). 在console上显示中文:

filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (dialog));
printf("%s\n", __(filename));

这段代码主要是从文件选择dialog的widget中获取一个文件名(绝对路径),要在console上显示该路径。

(3). 读取(保存)含中文字符路径的文件:

filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (dialog));
fp = fopen(__(filename), "a+b");

通过文件选择dialog的widget中获取一个文件名(绝对路径),然后用fopen函数打开。

从上述分析中可以看出,涉及到在widget上显示中文字符的,就要转换成UTF-8编码字符,用g_locale_to_utf8()而涉及到从widget获取字符(字符串)但不在widget上进行操作(一般是标准C的一些函数),就要把GTK+的UTF-8编码转换到本地编码,用g_locale_from_utf8()。

阅读(1716) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~